@@ -216,8 +216,14 @@ void SolverTrail::Change::dump(llvm::raw_ostream &out,
216
216
}
217
217
218
218
void SolverTrail::recordChange (Change change) {
219
+ LLVM_DEBUG (llvm::dbgs () << " + " ; change.dump (llvm::dbgs (), CS, 0 ););
219
220
ASSERT (!UndoActive);
221
+
220
222
Changes.push_back (change);
223
+
224
+ ++Total;
225
+ if (Changes.size () > Max)
226
+ Max = Changes.size ();
221
227
}
222
228
223
229
void SolverTrail::undo (unsigned toIndex) {
@@ -226,20 +232,28 @@ void SolverTrail::undo(unsigned toIndex) {
226
232
if (CS.inInvalidState ())
227
233
return ;
228
234
235
+ LLVM_DEBUG (llvm::dbgs () << " decisions " << Changes.size ()
236
+ << " max " << Max
237
+ << " total " << Total << " \n " );
229
238
ASSERT (Changes.size () >= toIndex && " Trail corrupted" );
230
239
ASSERT (!UndoActive);
231
240
UndoActive = true ;
232
241
242
+ // FIXME: Undo all changes in the correct order!
233
243
for (unsigned i = Changes.size (); i > toIndex; i--) {
234
244
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 ));
236
247
change.undo (CS);
248
+ }
237
249
}
238
250
239
251
for (unsigned i = Changes.size (); i > toIndex; i--) {
240
252
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 ));
242
255
change.undo (CS);
256
+ }
243
257
}
244
258
245
259
Changes.resize (toIndex);
0 commit comments