@@ -202,18 +202,6 @@ class SolverStep {
202202 return StepResult::unsolved (followup);
203203 }
204204
205- // / Erase constraint from the constraint system (include constraint graph)
206- // / and return the constraint which follows it.
207- ConstraintList::iterator erase (Constraint *constraint) {
208- CS.CG .removeConstraint (constraint);
209- return CS.InactiveConstraints .erase (constraint);
210- }
211-
212- void restore (ConstraintList::iterator &iterator, Constraint *constraint) {
213- CS.InactiveConstraints .insert (iterator, constraint);
214- CS.CG .addConstraint (constraint);
215- }
216-
217205 void recordDisjunctionChoice (ConstraintLocator *disjunctionLocator,
218206 unsigned index) const {
219207 CS.recordDisjunctionChoice (disjunctionLocator, index);
@@ -684,16 +672,14 @@ class TypeVariableStep final : public BindingStep<TypeVarBindingProducer> {
684672class DisjunctionStep final : public BindingStep<DisjunctionChoiceProducer> {
685673 Constraint *Disjunction;
686674 SmallVector<Constraint *, 4 > DisabledChoices;
687- ConstraintList::iterator AfterDisjunction;
688675
689676 std::optional<Score> BestNonGenericScore;
690677 std::optional<std::pair<Constraint *, Score>> LastSolvedChoice;
691678
692679public:
693680 DisjunctionStep (ConstraintSystem &cs, Constraint *disjunction,
694681 SmallVectorImpl<Solution> &solutions)
695- : BindingStep(cs, {cs, disjunction}, solutions), Disjunction(disjunction),
696- AfterDisjunction (erase(disjunction)) {
682+ : BindingStep(cs, {cs, disjunction}, solutions), Disjunction(disjunction) {
697683 assert (Disjunction->getKind () == ConstraintKind::Disjunction);
698684 pruneOverloadSet (Disjunction);
699685 ++cs.solverState ->NumDisjunctions ;
@@ -702,8 +688,6 @@ class DisjunctionStep final : public BindingStep<DisjunctionChoiceProducer> {
702688 ~DisjunctionStep () override {
703689 // Rewind back any changes left after attempting last choice.
704690 ActiveChoice.reset ();
705- // Return disjunction constraint back to the system.
706- restore (AfterDisjunction, Disjunction);
707691 // Re-enable previously disabled overload choices.
708692 for (auto *choice : DisabledChoices)
709693 choice->setEnabled ();
@@ -919,10 +903,6 @@ class ConjunctionStep : public BindingStep<ConjunctionElementProducer> {
919903
920904 // / Conjunction constraint associated with this step.
921905 Constraint *Conjunction;
922- // / Position of the conjunction in the inactive constraints
923- // / list which is required to re-instate it to the system
924- // / after this step is done.
925- ConstraintList::iterator AfterConjunction;
926906
927907 // / Indicates that one of the elements failed inference.
928908 bool HadFailure = false ;
@@ -950,7 +930,7 @@ class ConjunctionStep : public BindingStep<ConjunctionElementProducer> {
950930 conjunction->isIsolated () ? IsolatedSolutions : solutions),
951931 BestScore(getBestScore()),
952932 OuterScopeCount(cs.CountScopes, 0 ), Conjunction(conjunction),
953- AfterConjunction(erase(conjunction)), OuterSolutions(solutions) {
933+ OuterSolutions(solutions) {
954934 assert (conjunction->getKind () == ConstraintKind::Conjunction);
955935
956936 // Make a snapshot of the constraint system state before conjunction.
@@ -969,9 +949,6 @@ class ConjunctionStep : public BindingStep<ConjunctionElementProducer> {
969949 // Return all of the type variables and constraints back.
970950 Snapshot.reset ();
971951
972- // Restore conjunction constraint.
973- restore (AfterConjunction, Conjunction);
974-
975952 // Restore best score only if conjunction fails because
976953 // successful outcome should keep a score set by `restoreOuterState`.
977954 if (HadFailure)
0 commit comments