@@ -99,6 +99,26 @@ SolverTrail::Change::introducedToInference(TypeVariableType *typeVar,
9999 return result;
100100}
101101
102+ SolverTrail::Change
103+ SolverTrail::Change::inferredBindings (TypeVariableType *typeVar,
104+ Constraint *constraint) {
105+ Change result;
106+ result.Kind = ChangeKind::InferredBindings;
107+ result.TheConstraint .TypeVar = typeVar;
108+ result.TheConstraint .Constraint = constraint;
109+ return result;
110+ }
111+
112+ SolverTrail::Change
113+ SolverTrail::Change::retractedBindings (TypeVariableType *typeVar,
114+ Constraint *constraint) {
115+ Change result;
116+ result.Kind = ChangeKind::RetractedBindings;
117+ result.TheConstraint .TypeVar = typeVar;
118+ result.TheConstraint .Constraint = constraint;
119+ return result;
120+ }
121+
102122SolverTrail::Change
103123SolverTrail::Change::updatedTypeVariable (
104124 TypeVariableType *typeVar,
@@ -142,6 +162,14 @@ void SolverTrail::Change::undo(ConstraintSystem &cs) const {
142162 cg.retractFromInference (Binding.TypeVar , Binding.FixedType );
143163 break ;
144164
165+ case ChangeKind::InferredBindings:
166+ cg.retractBindings (TheConstraint.TypeVar , TheConstraint.Constraint );
167+ break ;
168+
169+ case ChangeKind::RetractedBindings:
170+ cg.inferBindings (TheConstraint.TypeVar , TheConstraint.Constraint );
171+ break ;
172+
145173 case ChangeKind::UpdatedTypeVariable:
146174 Update.TypeVar ->getImpl ().setRawOptions (Update.Options );
147175 Update.TypeVar ->getImpl ().ParentOrFixed = Update.ParentOrFixed ;
@@ -205,6 +233,24 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
205233 out << " to inference)\n " ;
206234 break ;
207235
236+ case ChangeKind::InferredBindings:
237+ out << " (inferred bindings from " ;
238+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
239+ indent + 2 );
240+ out << " for type variable " ;
241+ TheConstraint.TypeVar ->print (out, PO);
242+ out << " )\n " ;
243+ break ;
244+
245+ case ChangeKind::RetractedBindings:
246+ out << " (retracted bindings from " ;
247+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
248+ indent + 2 );
249+ out << " for type variable " ;
250+ TheConstraint.TypeVar ->print (out, PO);
251+ out << " )\n " ;
252+ break ;
253+
208254 case ChangeKind::UpdatedTypeVariable:
209255 out << " (updated type variable " ;
210256 Update.TypeVar ->print (out, PO);
0 commit comments