File tree Expand file tree Collapse file tree 2 files changed +9
-9
lines changed Expand file tree Collapse file tree 2 files changed +9
-9
lines changed Original file line number Diff line number Diff line change @@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
5
5
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
6
6
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
7
7
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8
- refs/heads/try2: c8c09d40fc3e34b1e8cc2cd58fd644488aa71327
8
+ refs/heads/try2: 31f9b5159297ffbc6da8f6e640cd6f4f8ed7c44d
9
9
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
10
10
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
11
11
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
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