about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorEduard Burtescu <edy.burt@gmail.com>2014-03-09 00:18:58 +0200
committerEduard Burtescu <edy.burt@gmail.com>2014-03-19 07:28:18 +0200
commitc04d4846f2a7a49e592f4e98f3e604851d600d4e (patch)
treef3ec43f7507bac6981f0278cd027cc71fc85f165 /src/libsyntax
parent87e72c38122cbd24199365232217ca8c15ebe995 (diff)
downloadrust-c04d4846f2a7a49e592f4e98f3e604851d600d4e.tar.gz
rust-c04d4846f2a7a49e592f4e98f3e604851d600d4e.zip
Discard MTWT & interner tables from TLD after they stop being useful.
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ext/mtwt.rs9
-rw-r--r--src/libsyntax/util/interner.rs10
2 files changed, 19 insertions, 0 deletions
diff --git a/src/libsyntax/ext/mtwt.rs b/src/libsyntax/ext/mtwt.rs
index 909f3eaf361..1a5587433ac 100644
--- a/src/libsyntax/ext/mtwt.rs
+++ b/src/libsyntax/ext/mtwt.rs
@@ -126,6 +126,15 @@ pub fn display_sctable(table: &SCTable) {
     }
 }
 
+/// Clear the tables from TLD to reclaim memory.
+pub fn clear_tables() {
+    with_sctable(|table| {
+        *table.table.borrow_mut().get() = Vec::new();
+        *table.mark_memo.borrow_mut().get() = HashMap::new();
+        *table.rename_memo.borrow_mut().get() = HashMap::new();
+    });
+    with_resolve_table_mut(|table| *table = HashMap::new());
+}
 
 // Add a value to the end of a vec, return its index
 fn idx_push<T>(vec: &mut Vec<T> , val: T) -> u32 {
diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs
index 969c7cec87c..c1ed96fe4de 100644
--- a/src/libsyntax/util/interner.rs
+++ b/src/libsyntax/util/interner.rs
@@ -84,6 +84,11 @@ impl<T:Eq + Hash + Freeze + Clone + 'static> Interner<T> {
             None => None,
         }
     }
+
+    pub fn clear(&self) {
+        *self.map.borrow_mut().get() = HashMap::new();
+        *self.vect.borrow_mut().get() = Vec::new();
+    }
 }
 
 #[deriving(Clone, Eq, Hash, Ord)]
@@ -222,6 +227,11 @@ impl StrInterner {
             None => None,
         }
     }
+
+    pub fn clear(&self) {
+        *self.map.borrow_mut().get() = HashMap::new();
+        *self.vect.borrow_mut().get() = Vec::new();
+    }
 }
 
 #[cfg(test)]