about summary refs log tree commit diff
path: root/src/libstd/cell.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/libstd/cell.rs')
-rw-r--r--src/libstd/cell.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs
index 3d8f63c26cd..016ed8aecdd 100644
--- a/src/libstd/cell.rs
+++ b/src/libstd/cell.rs
@@ -41,10 +41,11 @@ impl<T> Cell<T> {
     }
 
     // Calls a closure with a reference to the value.
-    fn with_ref(f: fn(v: &T)) {
-        let val = move self.take();
-        f(&val);
-        self.put_back(move val);
+    fn with_ref<R>(op: fn(v: &T) -> R) -> R {
+        let v = self.take();
+        let r = op(&v);
+        self.put_back(v);
+        return move r;
     }
 }