Skip to content

Commit d947ed3

Browse files
committed
[Archetype builder] Stub out getNestedType() for associated types. NFC
Start using this entrypoint when we have a specific associated type. The eventual goal here is to create the invariant resolveArchetype(t)->getDependentType()->isEqual(t) when t has fully-resolved DependentMemberTypes.
1 parent 91af1d6 commit d947ed3

File tree

3 files changed

+15
-3
lines changed

3 files changed

+15
-3
lines changed

include/swift/AST/ArchetypeBuilder.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,6 +574,9 @@ class ArchetypeBuilder::PotentialArchetype {
574574
PotentialArchetype *getNestedType(Identifier Name,
575575
ArchetypeBuilder &builder);
576576

577+
/// \brief Retrieve (or create) a nested type with a known associated type.
578+
PotentialArchetype *getNestedType(AssociatedTypeDecl *assocType,
579+
ArchetypeBuilder &builder);
577580

578581
/// \brief Retrieve (or build) the type corresponding to the potential
579582
/// archetype within the given generic environment.

lib/AST/ArchetypeBuilder.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,12 @@ auto ArchetypeBuilder::PotentialArchetype::getNestedType(
569569
return nested.front();
570570
}
571571

572+
auto ArchetypeBuilder::PotentialArchetype::getNestedType(
573+
AssociatedTypeDecl *assocType,
574+
ArchetypeBuilder &builder) -> PotentialArchetype * {
575+
return getNestedType(assocType->getName(), builder);
576+
}
577+
572578
Type ArchetypeBuilder::PotentialArchetype::getTypeInContext(
573579
ArchetypeBuilder &builder,
574580
GenericEnvironment *genericEnv) {
@@ -913,6 +919,9 @@ auto ArchetypeBuilder::resolveArchetype(Type type) -> PotentialArchetype * {
913919
if (!base)
914920
return nullptr;
915921

922+
if (auto assocType = dependentMember->getAssocType())
923+
return base->getNestedType(assocType, *this);
924+
916925
return base->getNestedType(dependentMember->getName(), *this);
917926
}
918927

@@ -1003,7 +1012,7 @@ bool ArchetypeBuilder::addConformanceRequirement(PotentialArchetype *PAT,
10031012
for (auto Member : Proto->getMembers()) {
10041013
if (auto AssocType = dyn_cast<AssociatedTypeDecl>(Member)) {
10051014
// Add requirements placed directly on this associated type.
1006-
auto AssocPA = T->getNestedType(AssocType->getName(), *this);
1015+
auto AssocPA = T->getNestedType(AssocType, *this);
10071016
if (AssocPA != T) {
10081017
if (addAbstractTypeParamRequirements(AssocType, AssocPA,
10091018
RequirementSource::Protocol,

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ Type DependentGenericTypeResolver::resolveSelfAssociatedType(
5555
assert(archetype && "Bad generic context nesting?");
5656

5757
return archetype
58-
->getNestedType(assocType->getName(), Builder)
58+
->getNestedType(assocType, Builder)
5959
->getDependentType(/*FIXME: */{ }, /*allowUnresolved=*/true);
6060
}
6161

@@ -214,7 +214,7 @@ Type CompleteGenericTypeResolver::resolveDependentMemberType(
214214
Type CompleteGenericTypeResolver::resolveSelfAssociatedType(
215215
Type selfTy, AssociatedTypeDecl *assocType) {
216216
return Builder.resolveArchetype(selfTy)
217-
->getNestedType(assocType->getName(), Builder)
217+
->getNestedType(assocType, Builder)
218218
->getDependentType(/*FIXME: */{ }, /*allowUnresolved=*/false);
219219
}
220220

0 commit comments

Comments
 (0)