Skip to content

Commit c0d981a

Browse files
committed
GSB: Simplify maybeResolveEquivalenceClass()
When passing in wantExactPotentialArchetype=false, we don't actually ever call getDependentType() on the result. So the Type + EquivalenceClass form of ResolvedType can be removed.
1 parent 2a0c8d1 commit c0d981a

File tree

2 files changed

+7
-20
lines changed

2 files changed

+7
-20
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3677,19 +3677,7 @@ ResolvedType GenericSignatureBuilder::maybeResolveEquivalenceClass(
36773677
if (!nestedPA)
36783678
return ResolvedType::forUnresolved(baseEquivClass);
36793679

3680-
// If base resolved to the anchor, then the nested potential archetype
3681-
// we found is the resolved potential archetype. Return it directly,
3682-
// so it doesn't need to be resolved again.
3683-
if (basePA == resolvedBase.getPotentialArchetypeIfKnown())
3684-
return ResolvedType(nestedPA);
3685-
3686-
// Compute the resolved dependent type to return.
3687-
Type resolvedBaseType = resolvedBase.getDependentType(*this);
3688-
Type resolvedMemberType =
3689-
DependentMemberType::get(resolvedBaseType, assocType);
3690-
3691-
return ResolvedType(resolvedMemberType,
3692-
nestedPA->getOrCreateEquivalenceClass(*this));
3680+
return ResolvedType(nestedPA);
36933681
} else {
36943682
auto *concreteDecl =
36953683
baseEquivClass->lookupNestedType(*this, depMemTy->getName());

lib/AST/GenericSignatureBuilderImpl.h

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,16 @@ class GenericSignatureBuilder::ResolvedType {
2121
ResolvedType(EquivalenceClass *equivClass)
2222
: type(), equivClass(equivClass) { }
2323

24+
/// A concrete resolved type .
25+
ResolvedType(Type type) : type(type), equivClass(nullptr) {
26+
assert(!type->isTypeParameter());
27+
}
28+
2429
public:
2530
/// A specific resolved potential archetype.
2631
ResolvedType(PotentialArchetype *pa)
2732
: type(pa), equivClass(nullptr) { }
2833

29-
/// A resolved type within the given equivalence class.
30-
ResolvedType(Type type, EquivalenceClass *equivClass)
31-
: type(type), equivClass(equivClass) {
32-
assert(type->isTypeParameter() == static_cast<bool>(equivClass) &&
33-
"type parameters must have equivalence classes");
34-
}
3534

3635
/// Return an unresolved result, which could be resolved when we
3736
/// learn more information about the given equivalence class.
@@ -41,7 +40,7 @@ class GenericSignatureBuilder::ResolvedType {
4140

4241
/// Return a result for a concrete type.
4342
static ResolvedType forConcrete(Type concreteType) {
44-
return ResolvedType(concreteType, nullptr);
43+
return ResolvedType(concreteType);
4544
}
4645

4746
/// Determine whether this result was resolved.

0 commit comments

Comments
 (0)