File tree Expand file tree Collapse file tree 1 file changed +8
-8
lines changed Expand file tree Collapse file tree 1 file changed +8
-8
lines changed Original file line number Diff line number Diff line change 13
13
#[ missing_doc] ;
14
14
15
15
use cast:: transmute_mut;
16
+ use unstable:: finally:: Finally ;
16
17
use prelude:: * ;
17
18
18
19
/*
@@ -65,18 +66,17 @@ impl<T> Cell<T> {
65
66
66
67
/// Calls a closure with a reference to the value.
67
68
pub fn with_ref < R > ( & self , op : & fn ( v : & T ) -> R ) -> R {
68
- let v = self . take ( ) ;
69
- let r = op ( & v) ;
70
- self . put_back ( v) ;
71
- r
69
+ do self . with_mut_ref |ptr| { op ( ptr) }
72
70
}
73
71
74
72
/// Calls a closure with a mutable reference to the value.
75
73
pub fn with_mut_ref < R > ( & self , op : & fn ( v : & mut T ) -> R ) -> R {
76
- let mut v = self . take ( ) ;
77
- let r = op ( & mut v) ;
78
- self . put_back ( v) ;
79
- r
74
+ let mut v = Some ( self . take ( ) ) ;
75
+ do ( || {
76
+ op ( v. get_mut_ref ( ) )
77
+ } ) . finally {
78
+ self . put_back ( v. take_unwrap ( ) ) ;
79
+ }
80
80
}
81
81
}
82
82
You can’t perform that action at this time.
0 commit comments