@@ -216,8 +216,14 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
216216}
217217
218218void SolverTrail::recordChange (Change change) {
219+ LLVM_DEBUG (llvm::dbgs () << " + " ; change.dump (llvm::dbgs (), CS, 0 ););
219220 ASSERT (!UndoActive);
221+
220222 Changes.push_back (change);
223+
224+ ++Total;
225+ if (Changes.size () > Max)
226+ Max = Changes.size ();
221227}
222228
223229void SolverTrail::undo (unsigned toIndex) {
@@ -226,20 +232,28 @@ void SolverTrail::undo(unsigned toIndex) {
226232 if (CS.inInvalidState ())
227233 return ;
228234
235+ LLVM_DEBUG (llvm::dbgs () << " decisions " << Changes.size ()
236+ << " max " << Max
237+ << " total " << Total << " \n " );
229238 ASSERT (Changes.size () >= toIndex && " Trail corrupted" );
230239 ASSERT (!UndoActive);
231240 UndoActive = true ;
232241
242+ // FIXME: Undo all changes in the correct order!
233243 for (unsigned i = Changes.size (); i > toIndex; i--) {
234244 auto change = Changes[i - 1 ];
235- if (change.Kind == ChangeKind::UpdatedTypeVariable)
245+ if (change.Kind == ChangeKind::UpdatedTypeVariable) {
246+ LLVM_DEBUG (llvm::dbgs () << " - " ; change.dump (llvm::dbgs (), CS, 0 ));
236247 change.undo (CS);
248+ }
237249 }
238250
239251 for (unsigned i = Changes.size (); i > toIndex; i--) {
240252 auto change = Changes[i - 1 ];
241- if (change.Kind != ChangeKind::UpdatedTypeVariable)
253+ if (change.Kind != ChangeKind::UpdatedTypeVariable) {
254+ LLVM_DEBUG (llvm::dbgs () << " - " ; change.dump (llvm::dbgs (), CS, 0 ));
242255 change.undo (CS);
256+ }
243257 }
244258
245259 Changes.resize (toIndex);
0 commit comments