Skip to content

Commit 9ee7020

Browse files
committed
RequirementMachine: Factor out TypeDifference::getOriginalSubstitution()
1 parent 60db917 commit 9ee7020

File tree

4 files changed

+13
-8
lines changed

4 files changed

+13
-8
lines changed

lib/AST/RequirementMachine/PropertyUnification.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ void PropertyMap::processTypeDifference(const TypeDifference &difference,
404404

405405
for (const auto &pair : difference.SameTypes) {
406406
// Both sides are type parameters; add a same-type requirement.
407-
MutableTerm lhsTerm(difference.LHS.getSubstitutions()[pair.first]);
407+
auto lhsTerm = difference.getOriginalSubstitution(pair.first);
408408
MutableTerm rhsTerm(pair.second);
409409

410410
if (debug) {
@@ -419,7 +419,7 @@ void PropertyMap::processTypeDifference(const TypeDifference &difference,
419419
for (const auto &pair : difference.ConcreteTypes) {
420420
// A type parameter is equated with a concrete type; add a concrete
421421
// type requirement.
422-
MutableTerm rhsTerm(difference.LHS.getSubstitutions()[pair.first]);
422+
auto rhsTerm = difference.getOriginalSubstitution(pair.first);
423423
MutableTerm lhsTerm(rhsTerm);
424424
lhsTerm.add(pair.second);
425425

lib/AST/RequirementMachine/RewriteLoop.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ RewritePathEvaluator::applyLeftConcreteProjection(const RewriteStep &step,
550550
const auto &difference = system.getTypeDifference(step.getTypeDifferenceID());
551551
unsigned index = step.getSubstitutionIndex();
552552

553-
MutableTerm leftProjection(difference.LHS.getSubstitutions()[index]);
553+
auto leftProjection = difference.getOriginalSubstitution(index);
554554

555555
MutableTerm leftBaseTerm(difference.BaseTerm);
556556
leftBaseTerm.add(difference.LHS);
@@ -607,7 +607,7 @@ RewritePathEvaluator::applyRightConcreteProjection(const RewriteStep &step,
607607
const auto &difference = system.getTypeDifference(step.getTypeDifferenceID());
608608
unsigned index = step.getSubstitutionIndex();
609609

610-
MutableTerm leftProjection(difference.LHS.getSubstitutions()[index]);
610+
auto leftProjection = difference.getOriginalSubstitution(index);
611611
auto rightProjection = difference.getReplacementSubstitution(index);
612612

613613
MutableTerm leftBaseTerm(difference.BaseTerm);

lib/AST/RequirementMachine/TypeDifference.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525
using namespace swift;
2626
using namespace rewriting;
2727

28+
MutableTerm TypeDifference::getOriginalSubstitution(unsigned index) const {
29+
return MutableTerm(LHS.getSubstitutions()[index]);
30+
}
31+
2832
MutableTerm TypeDifference::getReplacementSubstitution(unsigned index) const {
2933
for (const auto &pair : SameTypes) {
3034
if (pair.first == index) {
@@ -37,14 +41,14 @@ MutableTerm TypeDifference::getReplacementSubstitution(unsigned index) const {
3741
if (pair.first == index) {
3842
// Given a transformation Xn -> [concrete: D], return the
3943
// return Xn.[concrete: D].
40-
MutableTerm result(LHS.getSubstitutions()[index]);
44+
auto result = getOriginalSubstitution(index);
4145
result.add(pair.second);
4246
return result;
4347
}
4448
}
4549

4650
// Otherwise return the original substitution Xn.
47-
return MutableTerm(LHS.getSubstitutions()[index]);
51+
return getOriginalSubstitution(index);
4852
}
4953

5054
void TypeDifference::dump(llvm::raw_ostream &out) const {
@@ -53,12 +57,12 @@ void TypeDifference::dump(llvm::raw_ostream &out) const {
5357
llvm::errs() << "RHS: " << RHS << "\n";
5458

5559
for (const auto &pair : SameTypes) {
56-
out << "- " << LHS.getSubstitutions()[pair.first] << " (#";
60+
out << "- " << getOriginalSubstitution(pair.first) << " (#";
5761
out << pair.first << ") -> " << pair.second << "\n";
5862
}
5963

6064
for (const auto &pair : ConcreteTypes) {
61-
out << "- " << LHS.getSubstitutions()[pair.first] << " (#";
65+
out << "- " << getOriginalSubstitution(pair.first) << " (#";
6266
out << pair.first << ") -> " << pair.second << "\n";
6367
}
6468
}

lib/AST/RequirementMachine/TypeDifference.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ struct TypeDifference {
5858
: BaseTerm(baseTerm), LHS(lhs), RHS(rhs),
5959
SameTypes(sameTypes), ConcreteTypes(concreteTypes) {}
6060

61+
MutableTerm getOriginalSubstitution(unsigned index) const;
6162
MutableTerm getReplacementSubstitution(unsigned index) const;
6263

6364
void dump(llvm::raw_ostream &out) const;

0 commit comments

Comments
 (0)