about summary refs log tree commit diff
path: root/src/common/env.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/env.rs')
-rw-r--r--src/common/env.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/common/env.rs b/src/common/env.rs
index 8b5cde49e9e4..f499323639e3 100644
--- a/src/common/env.rs
+++ b/src/common/env.rs
@@ -1,4 +1,5 @@
 use std::collections::HashMap;
+use std::mem;
 
 use crate::ast::Ident;
 
@@ -25,6 +26,14 @@ impl<'ast, V> Env<'ast, V> {
         self.0.pop();
     }
 
+    pub fn save(&mut self) -> Self {
+        mem::take(self)
+    }
+
+    pub fn restore(&mut self, saved: Self) {
+        *self = saved;
+    }
+
     pub fn set(&mut self, k: &'ast Ident<'ast>, v: V) {
         self.0.last_mut().unwrap().insert(k, v);
     }