@@ -79,13 +79,6 @@ void RewriteStep::dump(llvm::raw_ostream &out,
7979
8080 break ;
8181 }
82- case ConcreteTypeWitness: {
83- evaluator.applyConcreteTypeWitness (*this , system);
84-
85- out << (Inverse ? " ConcreteTypeWitness⁻¹"
86- : " ConcreteTypeWitness" );
87- break ;
88- }
8982 case SameTypeWitness: {
9083 evaluator.applySameTypeWitness (*this , system);
9184
@@ -389,64 +382,6 @@ RewritePathEvaluator::applyRelation(const RewriteStep &step,
389382 return {lhs, rhs, prefix, suffix};
390383}
391384
392- void RewritePathEvaluator::applyConcreteTypeWitness (const RewriteStep &step,
393- const RewriteSystem &system) {
394- checkPrimary ();
395- auto &term = Primary.back ();
396-
397- const auto &witness = system.getTypeWitness (step.Arg );
398- auto fail = [&]() {
399- llvm::errs () << " Bad concrete type witness term:\n " ;
400- llvm::errs () << term << " \n\n " ;
401- witness.dump (llvm::errs ());
402- llvm::errs () << " End offset: " << step.EndOffset << " \n " ;
403- llvm::errs () << " Inverse: " << step.Inverse << " \n " ;
404- abort ();
405- };
406-
407- if (!step.Inverse ) {
408- // Make sure the term takes the following form, where |V| == EndOffset:
409- //
410- // U.[concrete: C : P].[P:X].[concrete: C.X].V
411- if (term.size () <= step.EndOffset + 3 ||
412- *(term.end () - step.EndOffset - 3 ) != witness.getConcreteConformance () ||
413- *(term.end () - step.EndOffset - 2 ) != witness.getAssocType () ||
414- *(term.end () - step.EndOffset - 1 ) != witness.getConcreteType ()) {
415- fail ();
416- }
417-
418- // Get the subterm U.[concrete: C : P].[P:X].
419- MutableTerm newTerm (term.begin (), term.end () - step.EndOffset - 1 );
420-
421- // Add the subterm V, to get U.[concrete: C : P].[P:X].V.
422- newTerm.append (term.end () - step.EndOffset , term.end ());
423-
424- term = newTerm;
425- } else {
426- // Make sure the term takes the following form, where |V| == EndOffset:
427- //
428- // U.[concrete: C : P].[P:X].V
429- if (term.size () <= step.EndOffset + 2 ||
430- *(term.end () - step.EndOffset - 2 ) != witness.getConcreteConformance () ||
431- *(term.end () - step.EndOffset - 1 ) != witness.getAssocType ()) {
432- fail ();
433- }
434-
435- // Get the subterm U.[concrete: C : P].[P:X].
436- MutableTerm newTerm (term.begin (), term.end () - step.EndOffset );
437-
438- // Add the symbol [concrete: C.X].
439- newTerm.add (witness.getConcreteType ());
440-
441- // Add the subterm V, to get
442- //
443- // U.[concrete: C : P].[P:X].[concrete: C.X].V
444- newTerm.append (term.end () - step.EndOffset , term.end ());
445-
446- term = newTerm;
447- }
448- }
449-
450385void RewritePathEvaluator::applySameTypeWitness (const RewriteStep &step,
451386 const RewriteSystem &system) {
452387 checkPrimary ();
@@ -542,10 +477,6 @@ void RewritePathEvaluator::apply(const RewriteStep &step,
542477 applyRelation (step, system);
543478 break ;
544479
545- case RewriteStep::ConcreteTypeWitness:
546- applyConcreteTypeWitness (step, system);
547- break ;
548-
549480 case RewriteStep::SameTypeWitness:
550481 applySameTypeWitness (step, system);
551482 break ;
0 commit comments