mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
[GSB] Switch resolveDependentMemberTypes() off of resolveArchetype().
We want to do the lookup into the parent equivalence class here.
This commit is contained in:
@@ -5809,12 +5809,24 @@ static Type resolveDependentMemberTypes(GenericSignatureBuilder &builder,
|
||||
if (auto depTy = dyn_cast<DependentMemberType>(type)) {
|
||||
if (depTy->getAssocType()) return None;
|
||||
|
||||
auto pa = builder.resolveArchetype(
|
||||
type, ArchetypeResolutionKind::CompleteWellFormed);
|
||||
if (!pa)
|
||||
Type newBase = resolveDependentMemberTypes(builder, depTy->getBase());
|
||||
|
||||
auto parentEquivClass =
|
||||
builder.resolveEquivalenceClass(
|
||||
newBase,
|
||||
ArchetypeResolutionKind::CompleteWellFormed);
|
||||
if (!parentEquivClass)
|
||||
return ErrorType::get(depTy);
|
||||
|
||||
return pa->getDependentType({ });
|
||||
auto memberType = parentEquivClass->lookupNestedType(depTy->getName());
|
||||
if (!memberType)
|
||||
return ErrorType::get(depTy);
|
||||
|
||||
if (auto assocType = dyn_cast<AssociatedTypeDecl>(memberType))
|
||||
return Type(DependentMemberType::get(newBase, assocType));
|
||||
|
||||
// FIXME: This is a weird case, because the type is concrete.
|
||||
return Type(type);
|
||||
}
|
||||
|
||||
return None;
|
||||
|
||||
Reference in New Issue
Block a user