@@ -50,12 +50,13 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
50
50
llvm::SmallDenseMap<TypeBase *, llvm::SmallVector<Type, 2 >> sameTypeReqs;
51
51
52
52
auto genericParams = proto->getGenericSignature ().getGenericParams ();
53
+ const auto &protos = System.getProtocols ();
53
54
54
55
// Convert a rewrite rule into a requirement.
55
56
auto createRequirementFromRule = [&](const Rule &rule) {
56
57
if (auto prop = rule.isPropertyRule ()) {
57
58
auto subjectType = Context.getTypeForTerm (rule.getRHS (), genericParams,
58
- System. getProtocols () );
59
+ protos );
59
60
60
61
switch (prop->getKind ()) {
61
62
case Symbol::Kind::Protocol:
@@ -65,9 +66,29 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
65
66
return ;
66
67
67
68
case Symbol::Kind::Layout:
68
- case Symbol::Kind::ConcreteType:
69
+ reqs.emplace_back (RequirementKind::Layout,
70
+ subjectType,
71
+ prop->getLayoutConstraint ());
72
+ return ;
73
+
69
74
case Symbol::Kind::Superclass:
70
- // FIXME
75
+ reqs.emplace_back (RequirementKind::Superclass,
76
+ subjectType,
77
+ Context.getTypeFromSubstitutionSchema (
78
+ prop->getSuperclass (),
79
+ prop->getSubstitutions (),
80
+ genericParams, MutableTerm (),
81
+ protos));
82
+ return ;
83
+
84
+ case Symbol::Kind::ConcreteType:
85
+ reqs.emplace_back (RequirementKind::SameType,
86
+ subjectType,
87
+ Context.getTypeFromSubstitutionSchema (
88
+ prop->getConcreteType (),
89
+ prop->getSubstitutions (),
90
+ genericParams, MutableTerm (),
91
+ protos));
71
92
return ;
72
93
73
94
case Symbol::Kind::Name:
@@ -79,9 +100,9 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
79
100
llvm_unreachable (" Invalid symbol kind" );
80
101
} else if (rule.getLHS ().back ().getKind () != Symbol::Kind::Protocol) {
81
102
auto constraintType = Context.getTypeForTerm (rule.getLHS (), genericParams,
82
- System. getProtocols () );
103
+ protos );
83
104
auto subjectType = Context.getTypeForTerm (rule.getRHS (), genericParams,
84
- System. getProtocols () );
105
+ protos );
85
106
86
107
sameTypeReqs[subjectType.getPointer ()].push_back (constraintType);
87
108
}
0 commit comments