File tree Expand file tree Collapse file tree 2 files changed +43
-2
lines changed
branches/auto/src/libcore/unstable Expand file tree Collapse file tree 2 files changed +43
-2
lines changed Original file line number Diff line number Diff line change @@ -14,6 +14,6 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
14
14
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
15
15
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
16
16
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
17
- refs/heads/auto: e0defb8466e624ded66ef00f092a86b638e01152
17
+ refs/heads/auto: 5f59012cce2675d805e5a6a3af75b76ee015af24
18
18
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
19
19
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ do || {
25
25
26
26
use ops:: Drop ;
27
27
28
- #[ cfg( test) ] use task:: failing;
28
+ #[ cfg( test) ] use task:: { failing, spawn } ;
29
29
30
30
pub trait Finally < T > {
31
31
fn finally ( & self , dtor : & fn ( ) ) -> T ;
@@ -41,6 +41,26 @@ impl<'self,T> Finally<T> for &'self fn() -> T {
41
41
}
42
42
}
43
43
44
+ impl < T > Finally < T > for ~fn ( ) -> T {
45
+ fn finally ( & self , dtor : & fn ( ) ) -> T {
46
+ let _d = Finallyalizer {
47
+ dtor : dtor
48
+ } ;
49
+
50
+ ( * self ) ( )
51
+ }
52
+ }
53
+
54
+ impl < T > Finally < T > for @fn ( ) -> T {
55
+ fn finally ( & self , dtor : & fn ( ) ) -> T {
56
+ let _d = Finallyalizer {
57
+ dtor : dtor
58
+ } ;
59
+
60
+ ( * self ) ( )
61
+ }
62
+ }
63
+
44
64
struct Finallyalizer < ' self > {
45
65
dtor : & ' self fn ( )
46
66
}
@@ -96,3 +116,24 @@ fn test_compact() {
96
116
do_some_fallible_work. finally (
97
117
but_always_run_this_function) ;
98
118
}
119
+
120
+ #[ test]
121
+ fn test_owned ( ) {
122
+ fn spawn_with_finalizer ( f : ~fn ( ) ) {
123
+ do spawn { do f. finally { } }
124
+ }
125
+ let owned: ~fn ( ) = || { } ;
126
+ spawn_with_finalizer ( owned) ;
127
+ }
128
+
129
+ #[ test]
130
+ fn test_managed ( ) {
131
+ let i = @mut 10 ;
132
+ let managed: @fn ( ) -> int = || {
133
+ let r = * i;
134
+ * i += 10 ;
135
+ r
136
+ } ;
137
+ assert ! ( do managed. finally { } == 10 ) ;
138
+ assert ! ( * i == 20 ) ;
139
+ }
You can’t perform that action at this time.
0 commit comments