Skip to content

Commit e8c9b3f

Browse files
committed
[GSB] Eliminate the GenericSignatureBuilder from PotentialArchetype.
Now that getBuilder() is gone, stash an ASTContext into root PotentialArchetypes instead of a GenericSignatureBuilder. This eliminates some ickiness where we had to re-root potential archetypes when moving a GenericSignatureBuilder.
1 parent 2f3b2df commit e8c9b3f

File tree

2 files changed

+10
-22
lines changed

2 files changed

+10
-22
lines changed

include/swift/AST/GenericSignatureBuilder.h

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,8 +1478,8 @@ struct GenericSignatureBuilder::Constraint {
14781478

14791479
class GenericSignatureBuilder::PotentialArchetype {
14801480
/// The parent of this potential archetype (for a nested type) or the
1481-
/// generic signature builder in which this root resides.
1482-
llvm::PointerUnion<PotentialArchetype*, GenericSignatureBuilder*> parentOrBuilder;
1481+
/// ASTContext in which the potential archetype resides.
1482+
llvm::PointerUnion<PotentialArchetype*, ASTContext*> parentOrContext;
14831483

14841484
/// The identifier describing this particular archetype.
14851485
///
@@ -1545,17 +1545,16 @@ class GenericSignatureBuilder::PotentialArchetype {
15451545

15461546
/// \brief Construct a new potential archetype for a concrete declaration.
15471547
PotentialArchetype(PotentialArchetype *parent, TypeDecl *concreteDecl)
1548-
: parentOrBuilder(parent), identifier(concreteDecl)
1548+
: parentOrContext(parent), identifier(concreteDecl)
15491549
{
15501550
assert(parent != nullptr && "Not a nested type?");
15511551
assert(!isa<AssociatedTypeDecl>(concreteDecl) ||
15521552
cast<AssociatedTypeDecl>(concreteDecl)->getOverriddenDecls().empty());
15531553
}
15541554

15551555
/// \brief Construct a new potential archetype for a generic parameter.
1556-
PotentialArchetype(GenericSignatureBuilder *builder,
1557-
GenericParamKey genericParam)
1558-
: parentOrBuilder(builder), identifier(genericParam)
1556+
PotentialArchetype(ASTContext &ctx, GenericParamKey genericParam)
1557+
: parentOrContext(&ctx), identifier(genericParam)
15591558
{
15601559
}
15611560

@@ -1564,13 +1563,6 @@ class GenericSignatureBuilder::PotentialArchetype {
15641563
/// path compression on the way.
15651564
PotentialArchetype *getRepresentative() const;
15661565

1567-
private:
1568-
// Replace the generic signature builder.
1569-
void replaceBuilder(GenericSignatureBuilder *builder) {
1570-
assert(parentOrBuilder.is<GenericSignatureBuilder *>());
1571-
parentOrBuilder = builder;
1572-
}
1573-
15741566
friend class GenericSignatureBuilder;
15751567
friend class GenericSignature;
15761568

@@ -1583,7 +1575,7 @@ class GenericSignatureBuilder::PotentialArchetype {
15831575
/// Retrieve the parent of this potential archetype, which will be non-null
15841576
/// when this potential archetype is an associated type.
15851577
PotentialArchetype *getParent() const {
1586-
return parentOrBuilder.dyn_cast<PotentialArchetype *>();
1578+
return parentOrContext.dyn_cast<PotentialArchetype *>();
15871579
}
15881580

15891581
/// Retrieve the type declaration to which this nested type was resolved.
@@ -1601,7 +1593,7 @@ class GenericSignatureBuilder::PotentialArchetype {
16011593

16021594
/// Determine whether this is a generic parameter.
16031595
bool isGenericParam() const {
1604-
return parentOrBuilder.is<GenericSignatureBuilder *>();
1596+
return parentOrContext.is<ASTContext *>();
16051597
}
16061598

16071599
/// Retrieve the generic parameter key for a potential archetype that

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2925,8 +2925,8 @@ Type GenericSignatureBuilder::PotentialArchetype::getDependentType(
29252925
}
29262926

29272927
ASTContext &PotentialArchetype::getASTContext() const {
2928-
if (auto builder = parentOrBuilder.dyn_cast<GenericSignatureBuilder *>())
2929-
return builder->getASTContext();
2928+
if (auto context = parentOrContext.dyn_cast<ASTContext *>())
2929+
return *context;
29302930

29312931
return getResolvedType()->getASTContext();
29322932
}
@@ -3068,10 +3068,6 @@ GenericSignatureBuilder::GenericSignatureBuilder(
30683068
for (auto &gp : Impl->GenericParams) {
30693069
gp = gp->getCanonicalType()->castTo<GenericTypeParamType>();
30703070
}
3071-
3072-
// Point each root potential archetype at this generic signature builder.
3073-
for (auto pa : Impl->PotentialArchetypes)
3074-
pa->replaceBuilder(this);
30753071
}
30763072
}
30773073

@@ -3299,7 +3295,7 @@ void GenericSignatureBuilder::addGenericParameter(GenericTypeParamType *GenericP
32993295

33003296
// Create a potential archetype for this type parameter.
33013297
void *mem = Impl->Allocator.Allocate<PotentialArchetype>();
3302-
auto PA = new (mem) PotentialArchetype(this, GenericParam);
3298+
auto PA = new (mem) PotentialArchetype(getASTContext(), GenericParam);
33033299
Impl->GenericParams.push_back(GenericParam);
33043300
Impl->PotentialArchetypes.push_back(PA);
33053301
}

0 commit comments

Comments
 (0)