23
23
#include < vector>
24
24
25
25
#include " RequirementMachineImpl.h"
26
- #include " EquivalenceClassMap .h"
26
+ #include " PropertyMap .h"
27
27
#include " ProtocolGraph.h"
28
28
#include " RewriteContext.h"
29
29
#include " RewriteSystem.h"
@@ -47,25 +47,25 @@ RequirementMachine::getLocalRequirements(
47
47
GenericSignature::LocalRequirements result;
48
48
result.anchor = Impl->Context .getTypeForTerm (term, genericParams, protos);
49
49
50
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
51
- if (!equivClass )
50
+ auto *props = Impl->Map .lookUpProperties (term);
51
+ if (!props )
52
52
return result;
53
53
54
- if (equivClass ->isConcreteType ()) {
55
- result.concreteType = equivClass ->getConcreteType ({}, protos,
56
- Impl->Context );
54
+ if (props ->isConcreteType ()) {
55
+ result.concreteType = props ->getConcreteType ({}, protos,
56
+ Impl->Context );
57
57
return result;
58
58
}
59
59
60
- if (equivClass ->hasSuperclassBound ()) {
61
- result.superclass = equivClass ->getSuperclassBound ({}, protos,
62
- Impl->Context );
60
+ if (props ->hasSuperclassBound ()) {
61
+ result.superclass = props ->getSuperclassBound ({}, protos,
62
+ Impl->Context );
63
63
}
64
64
65
- for (const auto *proto : equivClass ->getConformsToExcludingSuperclassConformances ())
65
+ for (const auto *proto : props ->getConformsToExcludingSuperclassConformances ())
66
66
result.protos .push_back (const_cast <ProtocolDecl *>(proto));
67
67
68
- result.layout = equivClass ->getLayoutConstraint ();
68
+ result.layout = props ->getLayoutConstraint ();
69
69
70
70
return result;
71
71
}
@@ -76,14 +76,14 @@ bool RequirementMachine::requiresClass(Type depType) const {
76
76
Impl->System .simplify (term);
77
77
Impl->verify (term);
78
78
79
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
80
- if (!equivClass )
79
+ auto *props = Impl->Map .lookUpProperties (term);
80
+ if (!props )
81
81
return false ;
82
82
83
- if (equivClass ->isConcreteType ())
83
+ if (props ->isConcreteType ())
84
84
return false ;
85
85
86
- auto layout = equivClass ->getLayoutConstraint ();
86
+ auto layout = props ->getLayoutConstraint ();
87
87
return (layout && layout->isClass ());
88
88
}
89
89
@@ -93,11 +93,11 @@ LayoutConstraint RequirementMachine::getLayoutConstraint(Type depType) const {
93
93
Impl->System .simplify (term);
94
94
Impl->verify (term);
95
95
96
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
97
- if (!equivClass )
96
+ auto *props = Impl->Map .lookUpProperties (term);
97
+ if (!props )
98
98
return LayoutConstraint ();
99
99
100
- return equivClass ->getLayoutConstraint ();
100
+ return props ->getLayoutConstraint ();
101
101
}
102
102
103
103
bool RequirementMachine::requiresProtocol (Type depType,
@@ -107,14 +107,14 @@ bool RequirementMachine::requiresProtocol(Type depType,
107
107
Impl->System .simplify (term);
108
108
Impl->verify (term);
109
109
110
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
111
- if (!equivClass )
110
+ auto *props = Impl->Map .lookUpProperties (term);
111
+ if (!props )
112
112
return false ;
113
113
114
- if (equivClass ->isConcreteType ())
114
+ if (props ->isConcreteType ())
115
115
return false ;
116
116
117
- for (auto *otherProto : equivClass ->getConformsTo ()) {
117
+ for (auto *otherProto : props ->getConformsTo ()) {
118
118
if (otherProto == proto)
119
119
return true ;
120
120
}
@@ -129,15 +129,15 @@ RequirementMachine::getRequiredProtocols(Type depType) const {
129
129
Impl->System .simplify (term);
130
130
Impl->verify (term);
131
131
132
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
133
- if (!equivClass )
132
+ auto *props = Impl->Map .lookUpProperties (term);
133
+ if (!props )
134
134
return { };
135
135
136
- if (equivClass ->isConcreteType ())
136
+ if (props ->isConcreteType ())
137
137
return { };
138
138
139
139
GenericSignature::RequiredProtocols result;
140
- for (auto *otherProto : equivClass ->getConformsTo ()) {
140
+ for (auto *otherProto : props ->getConformsTo ()) {
141
141
result.push_back (const_cast <ProtocolDecl *>(otherProto));
142
142
}
143
143
@@ -152,15 +152,15 @@ Type RequirementMachine::getSuperclassBound(Type depType) const {
152
152
Impl->System .simplify (term);
153
153
Impl->verify (term);
154
154
155
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
156
- if (!equivClass )
155
+ auto *props = Impl->Map .lookUpProperties (term);
156
+ if (!props )
157
157
return Type ();
158
158
159
- if (!equivClass ->hasSuperclassBound ())
159
+ if (!props ->hasSuperclassBound ())
160
160
return Type ();
161
161
162
162
auto &protos = Impl->System .getProtocols ();
163
- return equivClass ->getSuperclassBound ({ }, protos, Impl->Context );
163
+ return props ->getSuperclassBound ({ }, protos, Impl->Context );
164
164
}
165
165
166
166
bool RequirementMachine::isConcreteType (Type depType) const {
@@ -169,11 +169,11 @@ bool RequirementMachine::isConcreteType(Type depType) const {
169
169
Impl->System .simplify (term);
170
170
Impl->verify (term);
171
171
172
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
173
- if (!equivClass )
172
+ auto *props = Impl->Map .lookUpProperties (term);
173
+ if (!props )
174
174
return false ;
175
175
176
- return equivClass ->isConcreteType ();
176
+ return props ->isConcreteType ();
177
177
}
178
178
179
179
Type RequirementMachine::getConcreteType (Type depType) const {
@@ -182,15 +182,15 @@ Type RequirementMachine::getConcreteType(Type depType) const {
182
182
Impl->System .simplify (term);
183
183
Impl->verify (term);
184
184
185
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
186
- if (!equivClass )
185
+ auto *props = Impl->Map .lookUpProperties (term);
186
+ if (!props )
187
187
return Type ();
188
188
189
- if (!equivClass ->isConcreteType ())
189
+ if (!props ->isConcreteType ())
190
190
return Type ();
191
191
192
192
auto &protos = Impl->System .getProtocols ();
193
- return equivClass ->getConcreteType ({ }, protos, Impl->Context );
193
+ return props ->getConcreteType ({ }, protos, Impl->Context );
194
194
}
195
195
196
196
bool RequirementMachine::areSameTypeParameterInContext (Type depType1,
@@ -231,11 +231,11 @@ RequirementMachine::Implementation::getLongestValidPrefix(const MutableTerm &ter
231
231
break ;
232
232
233
233
case Symbol::Kind::AssociatedType: {
234
- const auto *equivClass = Map.lookUpEquivalenceClass (prefix);
235
- if (!equivClass )
234
+ const auto *props = Map.lookUpProperties (prefix);
235
+ if (!props )
236
236
return prefix;
237
237
238
- auto conformsTo = equivClass ->getConformsTo ();
238
+ auto conformsTo = props ->getConformsTo ();
239
239
240
240
for (const auto *proto : symbol.getProtocols ()) {
241
241
if (!System.getProtocols ().isKnownProtocol (proto))
@@ -284,11 +284,11 @@ bool RequirementMachine::isCanonicalTypeInContext(Type type) const {
284
284
Impl->System .simplify (term);
285
285
Impl->verify (term);
286
286
287
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
288
- if (!equivClass )
287
+ auto *props = Impl->Map .lookUpProperties (term);
288
+ if (!props )
289
289
return false ;
290
290
291
- if (equivClass ->isConcreteType ())
291
+ if (props ->isConcreteType ())
292
292
return true ;
293
293
294
294
auto anchor = Impl->Context .getTypeForTerm (term, {}, protos);
@@ -352,10 +352,10 @@ Type RequirementMachine::getCanonicalTypeInContext(
352
352
auto prefixType = [&]() -> Type {
353
353
Impl->verify (prefix);
354
354
355
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (prefix);
356
- if (equivClass && equivClass ->isConcreteType ()) {
357
- auto concreteType = equivClass ->getConcreteType (genericParams,
358
- protos, Impl->Context );
355
+ auto *props = Impl->Map .lookUpProperties (prefix);
356
+ if (props && props ->isConcreteType ()) {
357
+ auto concreteType = props ->getConcreteType (genericParams,
358
+ protos, Impl->Context );
359
359
if (!concreteType->hasTypeParameter ())
360
360
return concreteType;
361
361
@@ -619,15 +619,15 @@ RequirementMachine::lookupNestedType(Type depType, Identifier name) const {
619
619
Impl->System .simplify (term);
620
620
Impl->verify (term);
621
621
622
- auto *equivClass = Impl->Map .lookUpEquivalenceClass (term);
623
- if (!equivClass )
622
+ auto *props = Impl->Map .lookUpProperties (term);
623
+ if (!props )
624
624
return nullptr ;
625
625
626
626
// Look for types with the given name in protocols that we know about.
627
627
AssociatedTypeDecl *bestAssocType = nullptr ;
628
628
SmallVector<TypeDecl *, 4 > concreteDecls;
629
629
630
- for (const auto *proto : equivClass ->getConformsTo ()) {
630
+ for (const auto *proto : props ->getConformsTo ()) {
631
631
// Look for an associated type and/or concrete type with this name.
632
632
for (auto member : const_cast <ProtocolDecl *>(proto)->lookupDirect (name)) {
633
633
// If this is an associated type, record whether it is the best
@@ -656,10 +656,10 @@ RequirementMachine::lookupNestedType(Type depType, Identifier name) const {
656
656
// FIXME: Shouldn't we always look here?
657
657
if (!bestAssocType && concreteDecls.empty ()) {
658
658
Type typeToSearch;
659
- if (equivClass ->isConcreteType ())
660
- typeToSearch = equivClass ->getConcreteType ();
661
- else if (equivClass ->hasSuperclassBound ())
662
- typeToSearch = equivClass ->getSuperclassBound ();
659
+ if (props ->isConcreteType ())
660
+ typeToSearch = props ->getConcreteType ();
661
+ else if (props ->hasSuperclassBound ())
662
+ typeToSearch = props ->getSuperclassBound ();
663
663
664
664
if (typeToSearch)
665
665
if (auto *decl = typeToSearch->getAnyNominal ())
0 commit comments