Skip to content

Commit 6d4a06e

Browse files
authored
Merge pull request #4390 from slavapestov/remove-primary-archetypes
AST: Remove GenericParamList::getPrimaryArchetypes(), NFC
2 parents d3d2b0a + 677e72a commit 6d4a06e

File tree

8 files changed

+36
-64
lines changed

8 files changed

+36
-64
lines changed

include/swift/AST/Decl.h

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1213,18 +1213,6 @@ class GenericParamList final :
12131213
///
12141214
/// This does not include archetypes from the outer generic parameter list(s).
12151215
ArrayRef<ArchetypeType *> getAllArchetypes() const { return AllArchetypes; }
1216-
1217-
/// \brief Return the number of primary archetypes.
1218-
unsigned getNumPrimaryArchetypes() const {
1219-
return size();
1220-
}
1221-
1222-
/// \brief Retrieves the list containing only the primary archetypes described
1223-
/// by this generic parameter clause. This excludes archetypes for associated
1224-
/// types of the primary archetypes.
1225-
ArrayRef<ArchetypeType *> getPrimaryArchetypes() const {
1226-
return getAllArchetypes().slice(0, getNumPrimaryArchetypes());
1227-
}
12281216

12291217
/// \brief Sets all archetypes *without* copying the source array.
12301218
void setAllArchetypes(ArrayRef<ArchetypeType *> AA) {
@@ -1236,20 +1224,12 @@ class GenericParamList final :
12361224
using NestedArchetypeIterator
12371225
= NestedGenericParamListIterator<ArchetypeType*,
12381226
&GenericParamList::getAllArchetypes>;
1239-
using NestedGenericParamIterator
1240-
= NestedGenericParamListIterator<GenericTypeParamDecl*,
1241-
&GenericParamList::getParams>;
12421227

12431228
/// \brief Retrieves a list containing all archetypes from this generic
12441229
/// parameter clause and all outer generic parameter clauses in outer-to-
12451230
/// inner order.
12461231
iterator_range<NestedArchetypeIterator> getAllNestedArchetypes() const;
12471232

1248-
/// \brief Retrieves a list containing all generic parameter records from
1249-
/// this generic parameter clause and all outer generic parameter clauses in
1250-
/// outer-to-inner order.
1251-
iterator_range<NestedGenericParamIterator> getNestedGenericParams() const;
1252-
12531233
/// \brief Retrieve the outer generic parameter list, which provides the
12541234
/// generic parameters of the context in which this generic parameter list
12551235
/// exists.
@@ -1395,17 +1375,11 @@ class NestedGenericParamListIterator {
13951375
};
13961376

13971377
using NestedArchetypeIterator = GenericParamList::NestedArchetypeIterator;
1398-
using NestedGenericParamIterator = GenericParamList::NestedGenericParamIterator;
13991378

14001379
inline iterator_range<NestedArchetypeIterator>
14011380
GenericParamList::getAllNestedArchetypes() const {
14021381
return {NestedArchetypeIterator(this), NestedArchetypeIterator()};
14031382
}
1404-
1405-
inline iterator_range<NestedGenericParamIterator>
1406-
GenericParamList::getNestedGenericParams() const {
1407-
return {NestedGenericParamIterator(this), NestedGenericParamIterator()};
1408-
}
14091383

14101384
/// A trailing where clause.
14111385
class alignas(RequirementRepr) TrailingWhereClause final :

lib/AST/ASTContext.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -801,9 +801,9 @@ static VarDecl *getPointeeProperty(VarDecl *&cache,
801801
// There must be a generic type with one argument.
802802
NominalTypeDecl *nominal = (ctx.*getNominal)();
803803
if (!nominal) return nullptr;
804-
auto generics = nominal->getGenericParams();
805-
if (!generics) return nullptr;
806-
if (generics->size() != 1) return nullptr;
804+
auto sig = nominal->getGenericSignature();
805+
if (!sig) return nullptr;
806+
if (sig->getGenericParams().size() != 1) return nullptr;
807807

808808
// There must be a property named "pointee".
809809
auto identifier = ctx.getIdentifier("pointee");
@@ -813,7 +813,7 @@ static VarDecl *getPointeeProperty(VarDecl *&cache,
813813
// The property must have type T.
814814
VarDecl *property = dyn_cast<VarDecl>(results[0]);
815815
if (!property) return nullptr;
816-
if (!property->getType()->isEqual(generics->getPrimaryArchetypes()[0]))
816+
if (!property->getInterfaceType()->isEqual(sig->getGenericParams()[0]))
817817
return nullptr;
818818

819819
cache = property;

lib/AST/ASTPrinter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4282,7 +4282,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
42824282
// Substitute a context archetype if we have context generic params.
42834283
if (Options.ContextGenericParams) {
42844284
return visit(getGenericParamListAtDepth(T->getDepth())
4285-
->getPrimaryArchetypes()[T->getIndex()]);
4285+
->getParams()[T->getIndex()]->getArchetype());
42864286
}
42874287

42884288
auto Name = T->getName();

lib/AST/ArchetypeBuilder.cpp

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2048,14 +2048,6 @@ Type ArchetypeBuilder::mapTypeIntoContext(Module *M,
20482048
--skipLevels;
20492049
}
20502050

2051-
// Return the archetype.
2052-
// FIXME: Use the allArchetypes vector instead of the generic param if
2053-
// available because of cross-module archetype serialization woes.
2054-
if (!myGenericParams->getAllArchetypes().empty())
2055-
return myGenericParams->getPrimaryArchetypes()[index];
2056-
2057-
// During type-checking, we may try to mapTypeIntoContext before
2058-
// AllArchetypes has been built, so fall back to the generic params.
20592051
return myGenericParams->getParams()[index]->getArchetype();
20602052
}
20612053

lib/PrintAsObjC/PrintAsObjC.cpp

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1533,10 +1533,12 @@ class ObjCPrinter : private DeclVisitor<ObjCPrinter>,
15331533
class ReferencedTypeFinder : private TypeVisitor<ReferencedTypeFinder> {
15341534
friend TypeVisitor;
15351535

1536+
ModuleDecl &M;
15361537
llvm::function_ref<void(ReferencedTypeFinder &, const TypeDecl *)> Callback;
15371538
bool IsWithinConstrainedObjCGeneric = false;
15381539

1539-
ReferencedTypeFinder(decltype(Callback) callback) : Callback(callback) {}
1540+
ReferencedTypeFinder(ModuleDecl &mod, decltype(Callback) callback)
1541+
: M(mod), Callback(callback) {}
15401542

15411543
void visitType(TypeBase *base) {
15421544
llvm_unreachable("unhandled type");
@@ -1612,28 +1614,34 @@ class ReferencedTypeFinder : private TypeVisitor<ReferencedTypeFinder> {
16121614

16131615
/// Returns true if \p archetype has any constraints other than being
16141616
/// class-bound ("conforms to" AnyObject).
1615-
static bool isConstrainedArchetype(const ArchetypeType *archetype) {
1616-
if (archetype->getSuperclass())
1617+
static bool isConstrained(ModuleDecl &mod,
1618+
GenericSignature *sig,
1619+
GenericTypeParamType *paramTy) {
1620+
if (sig->getSuperclassBound(paramTy, mod))
16171621
return true;
16181622

1619-
if (archetype->getConformsTo().size() > 1)
1623+
auto conformsTo = sig->getConformsTo(paramTy, mod);
1624+
1625+
if (conformsTo.size() > 1)
16201626
return true;
1621-
if (archetype->getConformsTo().size() == 0)
1627+
if (conformsTo.size() == 0)
16221628
return false;
16231629

1624-
const ProtocolDecl *proto = archetype->getConformsTo().front();
1630+
const ProtocolDecl *proto = conformsTo.front();
16251631
if (auto knownKind = proto->getKnownProtocolKind())
16261632
return knownKind.getValue() != KnownProtocolKind::AnyObject;
16271633
return true;
16281634
}
16291635

16301636
void visitBoundGenericType(BoundGenericType *boundGeneric) {
1631-
bool isObjCGeneric = boundGeneric->getDecl()->hasClangNode();
1637+
auto *decl = boundGeneric->getDecl();
1638+
bool isObjCGeneric = decl->hasClangNode();
1639+
auto *sig = decl->getGenericSignature();
16321640

16331641
for_each(boundGeneric->getGenericArgs(),
1634-
boundGeneric->getDecl()->getGenericParams()->getPrimaryArchetypes(),
1635-
[&](Type argTy, const ArchetypeType *archetype) {
1636-
if (isObjCGeneric && isConstrainedArchetype(archetype))
1642+
sig->getInnermostGenericParams(),
1643+
[&](Type argTy, GenericTypeParamType *paramTy) {
1644+
if (isObjCGeneric && isConstrained(M, sig, paramTy))
16371645
IsWithinConstrainedObjCGeneric = true;
16381646
visit(argTy);
16391647
IsWithinConstrainedObjCGeneric = false;
@@ -1652,8 +1660,8 @@ class ReferencedTypeFinder : private TypeVisitor<ReferencedTypeFinder> {
16521660
return IsWithinConstrainedObjCGeneric;
16531661
}
16541662

1655-
static void walk(Type ty, decltype(Callback) callback) {
1656-
ReferencedTypeFinder(callback).visit(ty);
1663+
static void walk(ModuleDecl &mod, Type ty, decltype(Callback) callback) {
1664+
ReferencedTypeFinder(mod, callback).visit(ty);
16571665
}
16581666
};
16591667

@@ -1835,7 +1843,7 @@ class ModuleWriter {
18351843
}
18361844

18371845
bool needsToBeIndividuallyDelayed = false;
1838-
ReferencedTypeFinder::walk(VD->getType(),
1846+
ReferencedTypeFinder::walk(M, VD->getType(),
18391847
[&](ReferencedTypeFinder &finder,
18401848
const TypeDecl *TD) {
18411849
if (TD == container)

lib/SIL/SILPrinter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,7 +1798,7 @@ void SILFunction::print(SILPrintContext &PrintCtx) const {
17981798
llvm::SmallString<16> disambiguatedNameBuf;
17991799
unsigned disambiguatedNameCounter = 1;
18001800
while (params) {
1801-
for (ArchetypeType *param : params->getPrimaryArchetypes()) {
1801+
for (GenericTypeParamDecl *param : params->getParams()) {
18021802
Identifier name = param->getName();
18031803
while (!UsedNames.insert(name).second) {
18041804
disambiguatedNameBuf.clear();
@@ -1809,7 +1809,7 @@ void SILFunction::print(SILPrintContext &PrintCtx) const {
18091809
name = getASTContext().getIdentifier(disambiguatedNameBuf);
18101810
}
18111811
if (name != param->getName())
1812-
Aliases[CanType(param)] = name;
1812+
Aliases[CanType(param->getArchetype())] = name;
18131813
}
18141814

18151815
params = params->getOuterParameters();

lib/SILGen/SILGenDynamicCast.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -329,14 +329,14 @@ static RValue emitCollectionDowncastExpr(SILGenFunction &SGF,
329329
// This will have been diagnosed by the accessors above.
330330
if (!fn) return SGF.emitUndefRValue(loc, destType);
331331

332-
auto fnArcheTypes = fn->getGenericParams()->getPrimaryArchetypes();
332+
auto fnGenericParams = fn->getGenericSignature()->getGenericParams();
333333
auto fromSubsts = fromCollection->gatherAllSubstitutions(
334334
SGF.SGM.SwiftModule, nullptr);
335335
auto toSubsts = toCollection->gatherAllSubstitutions(
336336
SGF.SGM.SwiftModule, nullptr);
337-
assert(fnArcheTypes.size() == fromSubsts.size() + toSubsts.size() &&
337+
assert(fnGenericParams.size() == fromSubsts.size() + toSubsts.size() &&
338338
"wrong number of generic collection parameters");
339-
(void) fnArcheTypes;
339+
(void) fnGenericParams;
340340

341341
// Form type parameter substitutions.
342342
SmallVector<Substitution, 4> subs;

lib/SILGen/SILGenExpr.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1000,14 +1000,14 @@ visitCollectionUpcastConversionExpr(CollectionUpcastConversionExpr *E,
10001000
// This will have been diagnosed by the accessors above.
10011001
if (!fn) return SGF.emitUndefRValue(E, E->getType());
10021002

1003-
auto fnArcheTypes = fn->getGenericParams()->getPrimaryArchetypes();
1003+
auto fnGenericParams = fn->getGenericParams()->getParams();
10041004
auto fromSubsts = fromCollection->gatherAllSubstitutions(
10051005
SGF.SGM.SwiftModule, nullptr);
10061006
auto toSubsts = toCollection->gatherAllSubstitutions(
10071007
SGF.SGM.SwiftModule, nullptr);
1008-
assert(fnArcheTypes.size() == fromSubsts.size() + toSubsts.size() &&
1008+
assert(fnGenericParams.size() == fromSubsts.size() + toSubsts.size() &&
10091009
"wrong number of generic collection parameters");
1010-
(void) fnArcheTypes;
1010+
(void) fnGenericParams;
10111011

10121012
// Form type parameter substitutions.
10131013
SmallVector<Substitution, 4> subs;
@@ -1439,10 +1439,8 @@ VarargsInfo Lowering::emitBeginVarargs(SILGenFunction &gen, SILLocation loc,
14391439
CanType baseTy, CanType arrayTy,
14401440
unsigned numElements) {
14411441
// Reabstract the base type against the array element type.
1442-
AbstractionPattern baseAbstraction(
1443-
arrayTy->getNominalOrBoundGenericNominal()
1444-
->getGenericParams()->getPrimaryArchetypes()[0]);
1445-
1442+
auto baseAbstraction = AbstractionPattern::getOpaque();
1443+
14461444
// Allocate the array.
14471445
SILValue numEltsVal = gen.B.createIntegerLiteral(loc,
14481446
SILType::getBuiltinWordType(gen.getASTContext()),

0 commit comments

Comments
 (0)