@@ -79,13 +79,6 @@ void RewriteStep::dump(llvm::raw_ostream &out,
7979
8080 break ;
8181 }
82- case SameTypeWitness: {
83- evaluator.applySameTypeWitness (*this , system);
84-
85- out << (Inverse ? " SameTypeWitness⁻¹"
86- : " SameTypeWitness" );
87- break ;
88- }
8982 }
9083}
9184
@@ -382,78 +375,6 @@ RewritePathEvaluator::applyRelation(const RewriteStep &step,
382375 return {lhs, rhs, prefix, suffix};
383376}
384377
385- void RewritePathEvaluator::applySameTypeWitness (const RewriteStep &step,
386- const RewriteSystem &system) {
387- checkPrimary ();
388- auto &term = Primary.back ();
389-
390- const auto &witness = system.getTypeWitness (step.Arg );
391- auto fail = [&]() {
392- llvm::errs () << " Bad same-type witness term:\n " ;
393- llvm::errs () << term << " \n\n " ;
394- witness.dump (llvm::errs ());
395- abort ();
396- };
397-
398- auto concreteConformanceSymbol = witness.getConcreteConformance ();
399-
400- #ifndef NDEBUG
401- if (witness.getConcreteType ().getConcreteType () !=
402- concreteConformanceSymbol.getConcreteType ()) {
403- fail ();
404- }
405- #endif
406-
407- auto witnessConcreteType = Symbol::forConcreteType (
408- concreteConformanceSymbol.getConcreteType (),
409- concreteConformanceSymbol.getSubstitutions (),
410- system.getRewriteContext ());
411-
412- if (!step.Inverse ) {
413- // Make sure the term takes the following form, where |V| == EndOffset:
414- //
415- // U.[concrete: C : P].[P:X].[concrete: C].V
416- if (term.size () <= step.EndOffset + 3 ||
417- *(term.end () - step.EndOffset - 3 ) != concreteConformanceSymbol ||
418- *(term.end () - step.EndOffset - 2 ) != witness.getAssocType () ||
419- *(term.end () - step.EndOffset - 1 ) != witnessConcreteType) {
420- fail ();
421- }
422-
423- // Get the subterm U.[concrete: C : P].
424- MutableTerm newTerm (term.begin (), term.end () - step.EndOffset - 2 );
425-
426- // Add the subterm V, to get U.[concrete: C : P].V.
427- newTerm.append (term.end () - step.EndOffset , term.end ());
428-
429- term = newTerm;
430- } else {
431- // Make sure the term takes the following form, where |V| == EndOffset:
432- //
433- // U.[concrete: C : P].V
434- if (term.size () <= step.EndOffset + 1 ||
435- *(term.end () - step.EndOffset - 1 ) != concreteConformanceSymbol) {
436- fail ();
437- }
438-
439- // Get the subterm U.[concrete: C : P].
440- MutableTerm newTerm (term.begin (), term.end () - step.EndOffset );
441-
442- // Add the symbol [P:X].
443- newTerm.add (witness.getAssocType ());
444-
445- // Add the symbol [concrete: C].
446- newTerm.add (witnessConcreteType);
447-
448- // Add the subterm V, to get
449- //
450- // U.[concrete: C : P].[P:X].[concrete: C].V
451- newTerm.append (term.end () - step.EndOffset , term.end ());
452-
453- term = newTerm;
454- }
455- }
456-
457378void RewritePathEvaluator::apply (const RewriteStep &step,
458379 const RewriteSystem &system) {
459380 switch (step.Kind ) {
@@ -476,9 +397,5 @@ void RewritePathEvaluator::apply(const RewriteStep &step,
476397 case RewriteStep::Relation:
477398 applyRelation (step, system);
478399 break ;
479-
480- case RewriteStep::SameTypeWitness:
481- applySameTypeWitness (step, system);
482- break ;
483400 }
484401}
0 commit comments