@@ -50,12 +50,13 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
5050 llvm::SmallDenseMap<TypeBase *, llvm::SmallVector<Type, 2 >> sameTypeReqs;
5151
5252 auto genericParams = proto->getGenericSignature ().getGenericParams ();
53+ const auto &protos = System.getProtocols ();
5354
5455 // Convert a rewrite rule into a requirement.
5556 auto createRequirementFromRule = [&](const Rule &rule) {
5657 if (auto prop = rule.isPropertyRule ()) {
5758 auto subjectType = Context.getTypeForTerm (rule.getRHS (), genericParams,
58- System. getProtocols () );
59+ protos );
5960
6061 switch (prop->getKind ()) {
6162 case Symbol::Kind::Protocol:
@@ -65,9 +66,29 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
6566 return ;
6667
6768 case Symbol::Kind::Layout:
68- case Symbol::Kind::ConcreteType:
69+ reqs.emplace_back (RequirementKind::Layout,
70+ subjectType,
71+ prop->getLayoutConstraint ());
72+ return ;
73+
6974 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));
7192 return ;
7293
7394 case Symbol::Kind::Name:
@@ -79,9 +100,9 @@ RequirementMachine::buildRequirementSignature(ArrayRef<unsigned> rules,
79100 llvm_unreachable (" Invalid symbol kind" );
80101 } else if (rule.getLHS ().back ().getKind () != Symbol::Kind::Protocol) {
81102 auto constraintType = Context.getTypeForTerm (rule.getLHS (), genericParams,
82- System. getProtocols () );
103+ protos );
83104 auto subjectType = Context.getTypeForTerm (rule.getRHS (), genericParams,
84- System. getProtocols () );
105+ protos );
85106
86107 sameTypeReqs[subjectType.getPointer ()].push_back (constraintType);
87108 }
0 commit comments