about summary refs log tree commit diff
path: root/src/libextra
diff options
context:
space:
mode:
authorGraydon Hoare <graydon@mozilla.com>2013-07-17 16:33:38 -0700
committerGraydon Hoare <graydon@mozilla.com>2013-07-23 15:23:02 -0700
commit9a093ab70a7d7b12e9cddf644e1a975375937465 (patch)
tree5347cb55cd5f3b455dd2bc7f4fa37528e1355494 /src/libextra
parentd5803e67eecda097932424a6c7b52cd1addd76b9 (diff)
downloadrust-9a093ab70a7d7b12e9cddf644e1a975375937465.tar.gz
rust-9a093ab70a7d7b12e9cddf644e1a975375937465.zip
extra: change workcache::Work::unwrap to move out of self.
Diffstat (limited to 'src/libextra')
-rw-r--r--src/libextra/workcache.rs44
1 files changed, 18 insertions, 26 deletions
diff --git a/src/libextra/workcache.rs b/src/libextra/workcache.rs
index 9825a20e86c..191dd6460cd 100644
--- a/src/libextra/workcache.rs
+++ b/src/libextra/workcache.rs
@@ -330,37 +330,29 @@ impl<T:Send +
     pub fn new(p: @mut Prep, e: Either<T,PortOne<(Exec,T)>>) -> Work<T> {
         Work { prep: p, res: Some(e) }
     }
-}
 
-// FIXME (#3724): movable self. This should be in impl Work.
-fn unwrap<T:Send +
-            Encodable<json::Encoder> +
-            Decodable<json::Decoder>>( // FIXME(#5121)
-        w: Work<T>) -> T {
-    let mut ww = w;
-    let s = ww.res.take();
-
-    match s {
-        None => fail!(),
-        Some(Left(v)) => v,
-        Some(Right(port)) => {
-            let (exe, v) = recv_one(port);
-
-            let s = json_encode(&v);
-
-            let p = &*ww.prep;
-            do p.ctxt.db.write |db| {
-                db.cache(p.fn_name,
-                         &p.declared_inputs,
-                         &exe.discovered_inputs,
-                         &exe.discovered_outputs,
-                         s);
+    pub fn unwrap(self) -> T {
+        let Work { prep, res } = self;
+        match res {
+            None => fail!(),
+            Some(Left(v)) => v,
+            Some(Right(port)) => {
+                let (exe, v) = recv_one(port);
+                let s = json_encode(&v);
+                do prep.ctxt.db.write |db| {
+                    db.cache(prep.fn_name,
+                             &prep.declared_inputs,
+                             &exe.discovered_inputs,
+                             &exe.discovered_outputs,
+                             s);
+                }
+                v
             }
-            v
         }
     }
 }
 
+
 //#[test]
 fn test() {
     use std::io::WriterUtil;
@@ -385,6 +377,6 @@ fn test() {
             out.to_str()
         }
     };
-    let s = unwrap(w);
+    let s = w.unwrap();
     io::println(s);
 }