about summary refs log tree commit diff
path: root/src/libstd/workcache.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/workcache.rs')
-rw-r--r--src/libstd/workcache.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/libstd/workcache.rs b/src/libstd/workcache.rs
index fbd695aee76..9f46ebef440 100644
--- a/src/libstd/workcache.rs
+++ b/src/libstd/workcache.rs
@@ -167,15 +167,27 @@ struct Database {
 }
 
 impl Database {
+    #[cfg(stage0)]
+    #[cfg(stage1)]
+    fn prepare(&mut self, fn_name: &str,
+               declared_inputs: &WorkMap) -> Option<(WorkMap, WorkMap, ~str)>
+    {
+        let k = json_encode(&(fn_name, declared_inputs));
+        let db_cache = copy self.db_cache;
+        match db_cache.find(&k) {
+            None => None,
+            Some(&v) => Some(json_decode(copy v))
+        }
+    }
 
-    fn prepare(&mut self,
-               fn_name: &str,
-               declared_inputs: &WorkMap) ->
-        Option<(WorkMap, WorkMap, ~str)> {
+    #[cfg(stage2)]
+    fn prepare(&mut self, fn_name: &str,
+               declared_inputs: &WorkMap) -> Option<(WorkMap, WorkMap, ~str)>
+    {
         let k = json_encode(&(fn_name, declared_inputs));
-        match self.db_cache.find_copy(&k) {
+        match self.db_cache.find(&k) {
             None => None,
-            Some(v) => Some(json_decode(v))
+            Some(&v) => Some(json_decode(copy v))
         }
     }