Skip to content

Commit aee2211

Browse files
committed
Use equivalence classes for visible-name lookup into type parameters.
1 parent 70d4e12 commit aee2211

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

lib/AST/LookupVisibleDecls.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -564,26 +564,26 @@ static void lookupVisibleMemberDeclsImpl(
564564
// If we're looking into a type parameter and we have a generic signature
565565
// builder, use the GSB to resolve where we should look.
566566
if (BaseTy->isTypeParameter() && GSB) {
567-
auto PA = GSB->resolveArchetype(
568-
BaseTy,
569-
ArchetypeResolutionKind::CompleteWellFormed);
570-
if (!PA) return;
567+
auto EquivClass =
568+
GSB->resolveEquivalenceClass(BaseTy,
569+
ArchetypeResolutionKind::CompleteWellFormed);
570+
if (!EquivClass) return;
571571

572-
if (auto Concrete = PA->getConcreteType()) {
573-
BaseTy = Concrete;
572+
if (EquivClass->concreteType) {
573+
BaseTy = EquivClass->concreteType;
574574
} else {
575575
// Conformances
576-
for (auto Proto : PA->getConformsTo()) {
576+
for (const auto &Conforms : EquivClass->conformsTo) {
577577
lookupVisibleProtocolMemberDecls(
578-
BaseTy, Proto->getDeclaredType(), Consumer, CurrDC, LS,
579-
getReasonForSuper(Reason), TypeResolver, GSB, Visited);
578+
BaseTy, Conforms.first->getDeclaredType(), Consumer, CurrDC,
579+
LS, getReasonForSuper(Reason), TypeResolver, GSB, Visited);
580580
}
581581

582582
// Superclass.
583-
if (auto Superclass = PA->getSuperclass()) {
584-
lookupVisibleMemberDeclsImpl(Superclass, Consumer, CurrDC, LS,
585-
getReasonForSuper(Reason), TypeResolver,
586-
GSB, Visited);
583+
if (EquivClass->superclass) {
584+
lookupVisibleMemberDeclsImpl(EquivClass->superclass, Consumer, CurrDC,
585+
LS, getReasonForSuper(Reason),
586+
TypeResolver, GSB, Visited);
587587
}
588588
return;
589589
}

0 commit comments

Comments
 (0)