Skip to content

Commit 84e2a62

Browse files
committed
RequirementMachine: Replace RewriteStep::AbstractTypeWitness with relations
1 parent abb85fb commit 84e2a62

File tree

5 files changed

+13
-80
lines changed

5 files changed

+13
-80
lines changed

lib/AST/RequirementMachine/HomotopyReduction.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,6 @@ RewriteLoop::findRulesAppearingOnceInEmptyContext(
100100
case RewriteStep::Relation:
101101
case RewriteStep::ConcreteTypeWitness:
102102
case RewriteStep::SameTypeWitness:
103-
case RewriteStep::AbstractTypeWitness:
104103
break;
105104
}
106105

@@ -222,7 +221,6 @@ RewritePath RewritePath::splitCycleAtRule(unsigned ruleID) const {
222221
case RewriteStep::Relation:
223222
case RewriteStep::ConcreteTypeWitness:
224223
case RewriteStep::SameTypeWitness:
225-
case RewriteStep::AbstractTypeWitness:
226224
break;
227225
}
228226

@@ -322,7 +320,6 @@ bool RewritePath::replaceRuleWithPath(unsigned ruleID,
322320
case RewriteStep::Relation:
323321
case RewriteStep::ConcreteTypeWitness:
324322
case RewriteStep::SameTypeWitness:
325-
case RewriteStep::AbstractTypeWitness:
326323
newSteps.push_back(step);
327324
break;
328325
}

lib/AST/RequirementMachine/MinimalConformances.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,6 @@ void RewriteLoop::findProtocolConformanceRules(
140140
case RewriteStep::Relation:
141141
case RewriteStep::ConcreteTypeWitness:
142142
case RewriteStep::SameTypeWitness:
143-
case RewriteStep::AbstractTypeWitness:
144143
break;
145144
}
146145
}

lib/AST/RequirementMachine/PropertyUnification.cpp

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -837,13 +837,15 @@ MutableTerm PropertyMap::computeConstraintTermForTypeWitness(
837837
//
838838
// Where S[n] is the nth substitution term.
839839

840-
auto result = Context.getRelativeTermForType(typeWitness, substitutions);
840+
auto result = Context.getRelativeTermForType(
841+
typeWitness, substitutions);
841842

842-
RewriteSystem::TypeWitness witness(Term::get(subjectType, Context),
843-
Term::get(result, Context));
844-
unsigned witnessID = System.recordTypeWitness(witness);
845-
path.add(RewriteStep::forAbstractTypeWitness(
846-
witnessID, /*inverse=*/false));
843+
unsigned relationID = System.recordRelation(
844+
Term::get(result, Context),
845+
Term::get(subjectType, Context));
846+
path.add(RewriteStep::forRelation(
847+
/*startOffset=*/0, relationID,
848+
/*inverse=*/false));
847849

848850
return result;
849851
}
@@ -862,11 +864,11 @@ MutableTerm PropertyMap::computeConstraintTermForTypeWitness(
862864
props->getConcreteType() == typeWitness) {
863865
auto result = props->getKey();
864866

865-
RewriteSystem::TypeWitness witness(Term::get(subjectType, Context),
866-
result);
867-
unsigned witnessID = System.recordTypeWitness(witness);
868-
path.add(RewriteStep::forAbstractTypeWitness(
869-
witnessID, /*inverse=*/false));
867+
unsigned relationID = System.recordRelation(
868+
result, Term::get(subjectType, Context));
869+
path.add(RewriteStep::forRelation(
870+
/*startOffset=*/0, relationID,
871+
/*inverse=*/false));
870872

871873
if (Debug.contains(DebugFlags::ConcretizeNestedTypes)) {
872874
llvm::dbgs() << "^^ Type witness can re-use property bag of "

lib/AST/RequirementMachine/RewriteLoop.cpp

Lines changed: 0 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -93,14 +93,6 @@ void RewriteStep::dump(llvm::raw_ostream &out,
9393
: "SameTypeWitness");
9494
break;
9595
}
96-
case AbstractTypeWitness: {
97-
evaluator.applyAbstractTypeWitness(*this, system);
98-
99-
out << (Inverse ? "AbstractTypeWitness⁻¹"
100-
: "AbstractTypeWitness");
101-
break;
102-
}
103-
10496
}
10597
}
10698

@@ -527,42 +519,6 @@ void RewritePathEvaluator::applySameTypeWitness(const RewriteStep &step,
527519
}
528520
}
529521

530-
void
531-
RewritePathEvaluator::applyAbstractTypeWitness(const RewriteStep &step,
532-
const RewriteSystem &system) {
533-
checkPrimary();
534-
auto &term = Primary.back();
535-
536-
const auto &witness = system.getTypeWitness(step.Arg);
537-
auto fail = [&]() {
538-
llvm::errs() << "Bad abstract type witness term:\n";
539-
llvm::errs() << term << "\n\n";
540-
witness.dump(llvm::errs());
541-
abort();
542-
};
543-
544-
auto typeWitness = witness.getAbstractType();
545-
546-
Term origTerm = (step.Inverse ? witness.LHS : typeWitness);
547-
Term substTerm = (step.Inverse ? typeWitness : witness.LHS);
548-
549-
if (term.size() != step.StartOffset + origTerm.size() + step.EndOffset) {
550-
fail();
551-
}
552-
553-
if (!std::equal(origTerm.begin(),
554-
origTerm.end(),
555-
term.begin() + step.StartOffset)) {
556-
fail();
557-
}
558-
559-
MutableTerm newTerm(term.begin(), term.begin() + step.StartOffset);
560-
newTerm.append(substTerm);
561-
newTerm.append(term.end() - step.EndOffset, term.end());
562-
563-
term = newTerm;
564-
}
565-
566522
void RewritePathEvaluator::apply(const RewriteStep &step,
567523
const RewriteSystem &system) {
568524
switch (step.Kind) {
@@ -593,9 +549,5 @@ void RewritePathEvaluator::apply(const RewriteStep &step,
593549
case RewriteStep::SameTypeWitness:
594550
applySameTypeWitness(step, system);
595551
break;
596-
597-
case RewriteStep::AbstractTypeWitness:
598-
applyAbstractTypeWitness(step, system);
599-
break;
600552
}
601553
}

lib/AST/RequirementMachine/RewriteLoop.h

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,6 @@ struct RewriteStep {
119119
///
120120
/// The Arg field stores the result of RewriteSystem::recordTypeWitness().
121121
SameTypeWitness,
122-
123-
/// If not inverted: replaces the abstract type witness term with the
124-
/// subject type term.
125-
///
126-
/// If inverted: replaces the subject type term with the abstract type
127-
/// term.
128-
///
129-
/// The Arg field stores the result of RewriteSystem::recordTypeWitness().
130-
AbstractTypeWitness,
131122
};
132123

133124
/// The rewrite step kind.
@@ -203,11 +194,6 @@ struct RewriteStep {
203194
/*arg=*/witnessID, inverse);
204195
}
205196

206-
static RewriteStep forAbstractTypeWitness(unsigned witnessID, bool inverse) {
207-
return RewriteStep(AbstractTypeWitness, /*startOffset=*/0, /*endOffset=*/0,
208-
/*arg=*/witnessID, inverse);
209-
}
210-
211197
bool isInContext() const {
212198
return StartOffset > 0 || EndOffset > 0;
213199
}
@@ -406,9 +392,6 @@ struct RewritePathEvaluator {
406392
void applySameTypeWitness(const RewriteStep &step,
407393
const RewriteSystem &system);
408394

409-
void applyAbstractTypeWitness(const RewriteStep &step,
410-
const RewriteSystem &system);
411-
412395
void dump(llvm::raw_ostream &out) const;
413396
};
414397

0 commit comments

Comments
 (0)