@@ -50,18 +50,22 @@ SolverTrail::Change::addedTypeVariable(TypeVariableType *typeVar) {
5050}
5151
5252SolverTrail::Change
53- SolverTrail::Change::addedConstraint (Constraint *constraint) {
53+ SolverTrail::Change::addedConstraint (TypeVariableType *typeVar,
54+ Constraint *constraint) {
5455 Change result;
5556 result.Kind = ChangeKind::AddedConstraint;
56- result.TheConstraint = constraint;
57+ result.TheConstraint .TypeVar = typeVar;
58+ result.TheConstraint .Constraint = constraint;
5759 return result;
5860}
5961
6062SolverTrail::Change
61- SolverTrail::Change::removedConstraint (Constraint *constraint) {
63+ SolverTrail::Change::removedConstraint (TypeVariableType *typeVar,
64+ Constraint *constraint) {
6265 Change result;
6366 result.Kind = ChangeKind::RemovedConstraint;
64- result.TheConstraint = constraint;
67+ result.TheConstraint .TypeVar = typeVar;
68+ result.TheConstraint .Constraint = constraint;
6569 return result;
6670}
6771
@@ -76,22 +80,32 @@ SolverTrail::Change::extendedEquivalenceClass(TypeVariableType *typeVar,
7680}
7781
7882SolverTrail::Change
79- SolverTrail::Change::boundTypeVariable (TypeVariableType *typeVar,
80- Type fixed ) {
83+ SolverTrail::Change::relatedTypeVariables (TypeVariableType *typeVar,
84+ TypeVariableType *otherTypeVar ) {
8185 Change result;
82- result.Kind = ChangeKind::BoundTypeVariable ;
83- result.Binding .TypeVar = typeVar;
84- result.Binding . FixedType = fixed. getPointer () ;
86+ result.Kind = ChangeKind::RelatedTypeVariables ;
87+ result.Relation .TypeVar = typeVar;
88+ result.Relation . OtherTypeVar = otherTypeVar ;
8589 return result;
8690}
8791
8892SolverTrail::Change
89- SolverTrail::Change::introducedToInference (TypeVariableType *typeVar,
90- Type fixed ) {
93+ SolverTrail::Change::inferredBindings (TypeVariableType *typeVar,
94+ Constraint *constraint ) {
9195 Change result;
92- result.Kind = ChangeKind::IntroducedToInference;
93- result.Binding .TypeVar = typeVar;
94- result.Binding .FixedType = fixed.getPointer ();
96+ result.Kind = ChangeKind::InferredBindings;
97+ result.TheConstraint .TypeVar = typeVar;
98+ result.TheConstraint .Constraint = constraint;
99+ return result;
100+ }
101+
102+ SolverTrail::Change
103+ SolverTrail::Change::retractedBindings (TypeVariableType *typeVar,
104+ Constraint *constraint) {
105+ Change result;
106+ result.Kind = ChangeKind::RetractedBindings;
107+ result.TheConstraint .TypeVar = typeVar;
108+ result.TheConstraint .Constraint = constraint;
95109 return result;
96110}
97111
@@ -117,11 +131,11 @@ void SolverTrail::Change::undo(ConstraintSystem &cs) const {
117131 break ;
118132
119133 case ChangeKind::AddedConstraint:
120- cg.removeConstraint (TheConstraint);
134+ cg.removeConstraint (TheConstraint. TypeVar , TheConstraint. Constraint );
121135 break ;
122136
123137 case ChangeKind::RemovedConstraint:
124- cg.addConstraint (TheConstraint);
138+ cg.addConstraint (TheConstraint. TypeVar , TheConstraint. Constraint );
125139 break ;
126140
127141 case ChangeKind::ExtendedEquivalenceClass: {
@@ -130,12 +144,16 @@ void SolverTrail::Change::undo(ConstraintSystem &cs) const {
130144 break ;
131145 }
132146
133- case ChangeKind::BoundTypeVariable :
134- cg.unbindTypeVariable (Binding .TypeVar , Binding. FixedType );
147+ case ChangeKind::RelatedTypeVariables :
148+ cg.unrelateTypeVariables (Relation .TypeVar , Relation. OtherTypeVar );
135149 break ;
136150
137- case ChangeKind::IntroducedToInference:
138- cg.retractFromInference (Binding.TypeVar , Binding.FixedType );
151+ case ChangeKind::InferredBindings:
152+ cg.retractBindings (TheConstraint.TypeVar , TheConstraint.Constraint );
153+ break ;
154+
155+ case ChangeKind::RetractedBindings:
156+ cg.inferBindings (TheConstraint.TypeVar , TheConstraint.Constraint );
139157 break ;
140158
141159 case ChangeKind::UpdatedTypeVariable:
@@ -162,13 +180,19 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
162180
163181 case ChangeKind::AddedConstraint:
164182 out << " (added constraint " ;
165- TheConstraint->print (out, &cs.getASTContext ().SourceMgr , indent + 2 );
183+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
184+ indent + 2 );
185+ out << " to type variable " ;
186+ TheConstraint.TypeVar ->print (out, PO);
166187 out << " )\n " ;
167188 break ;
168189
169190 case ChangeKind::RemovedConstraint:
170191 out << " (removed constraint " ;
171- TheConstraint->print (out, &cs.getASTContext ().SourceMgr , indent + 2 );
192+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
193+ indent + 2 );
194+ out << " from type variable " ;
195+ TheConstraint.TypeVar ->print (out, PO);
172196 out << " )\n " ;
173197 break ;
174198
@@ -179,20 +203,30 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
179203 break ;
180204 }
181205
182- case ChangeKind::BoundTypeVariable :
183- out << " (bound type variable " ;
184- Binding .TypeVar ->print (out, PO);
185- out << " to fixed type " ;
186- Binding. FixedType ->print (out, PO);
206+ case ChangeKind::RelatedTypeVariables :
207+ out << " (related type variable " ;
208+ Relation .TypeVar ->print (out, PO);
209+ out << " with " ;
210+ Relation. OtherTypeVar ->print (out, PO);
187211 out << " )\n " ;
188212 break ;
189213
190- case ChangeKind::IntroducedToInference:
191- out << " (introduced type variable " ;
192- Binding.TypeVar ->print (out, PO);
193- out << " with fixed type " ;
194- Binding.FixedType ->print (out, PO);
195- out << " to inference)\n " ;
214+ case ChangeKind::InferredBindings:
215+ out << " (inferred bindings from " ;
216+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
217+ indent + 2 );
218+ out << " for type variable " ;
219+ TheConstraint.TypeVar ->print (out, PO);
220+ out << " )\n " ;
221+ break ;
222+
223+ case ChangeKind::RetractedBindings:
224+ out << " (retracted bindings from " ;
225+ TheConstraint.Constraint ->print (out, &cs.getASTContext ().SourceMgr ,
226+ indent + 2 );
227+ out << " for type variable " ;
228+ TheConstraint.TypeVar ->print (out, PO);
229+ out << " )\n " ;
196230 break ;
197231
198232 case ChangeKind::UpdatedTypeVariable:
0 commit comments