about summary refs log tree commit diff
path: root/src/librustc_data_structures/snapshot_map
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2016-10-19 18:39:49 -0400
committerNiko Matsakis <niko@alum.mit.edu>2016-10-21 11:13:36 -0400
commit567b11fc3a70cdba960bf6037b9d658fafdc5ada (patch)
treef056cf57009f563b8887a61692e3b9a016f663a6 /src/librustc_data_structures/snapshot_map
parent974817d4932fd447f724c4527360a258952ffd48 (diff)
downloadrust-567b11fc3a70cdba960bf6037b9d658fafdc5ada.tar.gz
rust-567b11fc3a70cdba960bf6037b9d658fafdc5ada.zip
only remove keys that mention skolemized regions
Diffstat (limited to 'src/librustc_data_structures/snapshot_map')
-rw-r--r--src/librustc_data_structures/snapshot_map/mod.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/librustc_data_structures/snapshot_map/mod.rs b/src/librustc_data_structures/snapshot_map/mod.rs
index 23a67b3bd93..a4e6166032d 100644
--- a/src/librustc_data_structures/snapshot_map/mod.rs
+++ b/src/librustc_data_structures/snapshot_map/mod.rs
@@ -102,15 +102,19 @@ impl<K, V> SnapshotMap<K, V>
         }
     }
 
-    pub fn partial_rollback(&mut self, snapshot: &Snapshot) {
+    pub fn partial_rollback<F>(&mut self,
+                               snapshot: &Snapshot,
+                               should_revert_key: &F)
+        where F: Fn(&K) -> bool
+    {
         self.assert_open_snapshot(snapshot);
         for i in (snapshot.len + 1..self.undo_log.len()).rev() {
             let reverse = match self.undo_log[i] {
                 UndoLog::OpenSnapshot => false,
                 UndoLog::CommittedSnapshot => false,
                 UndoLog::Noop => false,
-                UndoLog::Inserted(..) => true,
-                UndoLog::Overwrite(..) => true,
+                UndoLog::Inserted(ref k) => should_revert_key(k),
+                UndoLog::Overwrite(ref k, _) => should_revert_key(k),
             };
 
             if reverse {