diff options
| author | bors <bors@rust-lang.org> | 2013-06-11 17:22:46 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-06-11 17:22:46 -0700 |
| commit | e06579bc0935ed1dcbddef41bc1b6a8850a2059c (patch) | |
| tree | e0bb9d0588de8dee119c5b1133860bb17dc16124 /src/libstd | |
| parent | 3f900dc7d1517bbc821989d68f3392d4aae96f93 (diff) | |
| parent | 78404af882c5d6bc8c4c5584d0981f7b6cf877e2 (diff) | |
| download | rust-e06579bc0935ed1dcbddef41bc1b6a8850a2059c.tar.gz rust-e06579bc0935ed1dcbddef41bc1b6a8850a2059c.zip | |
auto merge of #7056 : alexcrichton/rust/issue-4727, r=catamorphism
Closes #4727
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/unstable/finally.rs | 38 |
1 files changed, 16 insertions, 22 deletions
diff --git a/src/libstd/unstable/finally.rs b/src/libstd/unstable/finally.rs index 5001fb421cd..b15bceddb1c 100644 --- a/src/libstd/unstable/finally.rs +++ b/src/libstd/unstable/finally.rs @@ -31,17 +31,20 @@ pub trait Finally<T> { fn finally(&self, dtor: &fn()) -> T; } -impl<'self,T> Finally<T> for &'self fn() -> T { - fn finally(&self, dtor: &fn()) -> T { - let _d = Finallyalizer { - dtor: dtor - }; - - (*self)() +macro_rules! finally_fn { + ($fnty:ty) => { + impl<T> Finally<T> for $fnty { + fn finally(&self, dtor: &fn()) -> T { + let _d = Finallyalizer { + dtor: dtor + }; + (*self)() + } + } } } -impl<T> Finally<T> for ~fn() -> T { +impl<'self,T> Finally<T> for &'self fn() -> T { fn finally(&self, dtor: &fn()) -> T { let _d = Finallyalizer { dtor: dtor @@ -51,15 +54,9 @@ impl<T> Finally<T> for ~fn() -> T { } } -impl<T> Finally<T> for @fn() -> T { - fn finally(&self, dtor: &fn()) -> T { - let _d = Finallyalizer { - dtor: dtor - }; - - (*self)() - } -} +finally_fn!(~fn() -> T) +finally_fn!(@fn() -> T) +finally_fn!(extern "Rust" fn() -> T) struct Finallyalizer<'self> { dtor: &'self fn() @@ -108,10 +105,7 @@ fn test_retval() { #[test] fn test_compact() { - // FIXME #4727: Should be able to use a fn item instead - // of a closure for do_some_fallible_work, - // but it's a type error. - let do_some_fallible_work: &fn() = || { }; + fn do_some_fallible_work() {} fn but_always_run_this_function() { } do_some_fallible_work.finally( but_always_run_this_function); @@ -136,4 +130,4 @@ fn test_managed() { }; assert_eq!(do managed.finally {}, 10); assert_eq!(*i, 20); -} \ No newline at end of file +} |
