Skip to content

Commit 87cf15a

Browse files
committed
GSB: Replace some resolveDependentMemberTypes() calls with getCanonicalTypeInContext()
For now this has no effect since resolveDependentMemberTypes() maps type parameters to anchors, but I'm going to change it to not do that. Change all existing callers of resolveDependentMemberTypes() except for the one in maybeResolveEquivalenceClass() to use getCanonicalTypeInContext() instead.
1 parent 568320c commit 87cf15a

File tree

1 file changed

+10
-12
lines changed

1 file changed

+10
-12
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3759,8 +3759,7 @@ GenericSignatureBuilder::lookupConformance(CanType dependentType,
37593759
static Type resolveDependentMemberTypes(
37603760
GenericSignatureBuilder &builder,
37613761
Type type,
3762-
ArchetypeResolutionKind resolutionKind
3763-
= ArchetypeResolutionKind::WellFormed) {
3762+
ArchetypeResolutionKind resolutionKind) {
37643763
if (!type->hasTypeParameter()) return type;
37653764

37663765
return type.transformRec([&resolutionKind,
@@ -6195,7 +6194,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
61956194

61966195
if (equivClass.concreteType) {
61976196
Type resolvedConcreteType =
6198-
resolveDependentMemberTypes(*this, equivClass.concreteType);
6197+
getCanonicalTypeInContext(equivClass.concreteType, { });
61996198
graph.addConstraintsFromEquivClass(
62006199
*this, equivClass.concreteTypeConstraints,
62016200
RequirementKind::SameType,
@@ -6216,7 +6215,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
62166215
if (t->isEqual(resolvedConcreteType))
62176216
return false;
62186217

6219-
auto resolvedType = resolveDependentMemberTypes(*this, t);
6218+
auto resolvedType = getCanonicalTypeInContext(t, { });
62206219
if (resolvedType->isEqual(resolvedConcreteType))
62216220
return false;
62226221

@@ -6228,7 +6227,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
62286227
if (equivClass.superclass) {
62296228
// Resolve any thus-far-unresolved dependent types.
62306229
Type resolvedSuperclass =
6231-
resolveDependentMemberTypes(*this, equivClass.superclass);
6230+
getCanonicalTypeInContext(equivClass.superclass, { });
62326231
graph.addConstraintsFromEquivClass(
62336232
*this, equivClass.superclassConstraints,
62346233
RequirementKind::Superclass,
@@ -6249,7 +6248,7 @@ void GenericSignatureBuilder::computeRedundantRequirements() {
62496248
if (t->isEqual(resolvedSuperclass))
62506249
return false;
62516250

6252-
Type resolvedType = resolveDependentMemberTypes(*this, t);
6251+
Type resolvedType = getCanonicalTypeInContext(t, { });
62536252
if (resolvedType->isEqual(resolvedSuperclass))
62546253
return false;
62556254

@@ -7812,16 +7811,15 @@ void GenericSignatureBuilder::checkConcreteTypeConstraints(
78127811
EquivalenceClass *equivClass) {
78137812
// Resolve any thus-far-unresolved dependent types.
78147813
Type resolvedConcreteType =
7815-
resolveDependentMemberTypes(*this, equivClass->concreteType);
7814+
getCanonicalTypeInContext(equivClass->concreteType, genericParams);
78167815

78177816
checkConstraintList<Type>(
78187817
genericParams, equivClass->concreteTypeConstraints, RequirementKind::SameType,
78197818
[&](const ConcreteConstraint &constraint) {
78207819
if (constraint.value->isEqual(resolvedConcreteType))
78217820
return true;
78227821

7823-
auto resolvedType =
7824-
resolveDependentMemberTypes(*this, constraint.value);
7822+
auto resolvedType = getCanonicalTypeInContext(constraint.value, { });
78257823
return resolvedType->isEqual(resolvedConcreteType);
78267824
},
78277825
[&](const Constraint<Type> &constraint) {
@@ -7854,7 +7852,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
78547852

78557853
// Resolve any thus-far-unresolved dependent types.
78567854
Type resolvedSuperclass =
7857-
resolveDependentMemberTypes(*this, equivClass->superclass);
7855+
getCanonicalTypeInContext(equivClass->superclass, genericParams);
78587856

78597857
auto representativeConstraint =
78607858
checkConstraintList<Type>(
@@ -7864,7 +7862,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
78647862
return true;
78657863

78667864
Type resolvedType =
7867-
resolveDependentMemberTypes(*this, constraint.value);
7865+
getCanonicalTypeInContext(constraint.value, { });
78687866
return resolvedType->isEqual(resolvedSuperclass);
78697867
},
78707868
[&](const Constraint<Type> &constraint) {
@@ -7888,7 +7886,7 @@ void GenericSignatureBuilder::checkSuperclassConstraints(
78887886
// FIXME: Substitute into the concrete type.
78897887
if (equivClass->concreteType) {
78907888
Type resolvedConcreteType =
7891-
resolveDependentMemberTypes(*this, equivClass->concreteType);
7889+
getCanonicalTypeInContext(equivClass->concreteType, genericParams);
78927890
auto existing = equivClass->findAnyConcreteConstraintAsWritten();
78937891
// Make sure the concrete type fulfills the superclass requirement.
78947892
if (!equivClass->superclass->isExactSuperclassOf(resolvedConcreteType)){

0 commit comments

Comments
 (0)