From 305f5110a7d4a1ccad32bd0b154e53df59664528 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 10 Jun 2013 23:13:04 -0700 Subject: [PATCH 1/2] Add a finally impl for `extern "Rust" fn()` --- src/libstd/unstable/finally.rs | 38 ++++++++++++++-------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/src/libstd/unstable/finally.rs b/src/libstd/unstable/finally.rs index 5001fb421cd86..b15bceddb1c21 100644 --- a/src/libstd/unstable/finally.rs +++ b/src/libstd/unstable/finally.rs @@ -31,17 +31,20 @@ pub trait Finally { fn finally(&self, dtor: &fn()) -> T; } -impl<'self,T> Finally for &'self fn() -> T { - fn finally(&self, dtor: &fn()) -> T { - let _d = Finallyalizer { - dtor: dtor - }; - - (*self)() +macro_rules! finally_fn { + ($fnty:ty) => { + impl Finally for $fnty { + fn finally(&self, dtor: &fn()) -> T { + let _d = Finallyalizer { + dtor: dtor + }; + (*self)() + } + } } } -impl Finally for ~fn() -> T { +impl<'self,T> Finally for &'self fn() -> T { fn finally(&self, dtor: &fn()) -> T { let _d = Finallyalizer { dtor: dtor @@ -51,15 +54,9 @@ impl Finally for ~fn() -> T { } } -impl Finally 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 +} From 78404af882c5d6bc8c4c5584d0981f7b6cf877e2 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 11 Jun 2013 12:40:53 -0700 Subject: [PATCH 2/2] Ignore the test_package_request_version test for now --- src/librustpkg/tests.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/librustpkg/tests.rs b/src/librustpkg/tests.rs index 8df84b27fccf4..b8cce8055d3ec 100644 --- a/src/librustpkg/tests.rs +++ b/src/librustpkg/tests.rs @@ -280,7 +280,7 @@ fn test_package_version() { // FIXME #7006: Fails on linux for some reason #[test] -#[ignore(cfg(target_os = "linux"))] +#[ignore] fn test_package_request_version() { let temp_pkg_id = PkgId::new("github.com/catamorphism/test_pkg_version#0.3"); let temp = mk_empty_workspace(&LocalPath(Path("test_pkg_version")), &ExactRevision(~"0.3"));