From 68ea9aed96b6b8147b6c37b844c85cb7ae2867f4 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Tue, 10 Sep 2013 18:57:24 -0700 Subject: librustc: Remove `@fn` managed closures from the language. --- src/libstd/io.rs | 32 ++++++++++++++++++++++++-------- src/libstd/reflect.rs | 8 +++++--- src/libstd/unstable/finally.rs | 1 - 3 files changed, 29 insertions(+), 12 deletions(-) (limited to 'src/libstd') diff --git a/src/libstd/io.rs b/src/libstd/io.rs index 890a53690d9..ab8af22e116 100644 --- a/src/libstd/io.rs +++ b/src/libstd/io.rs @@ -1846,31 +1846,38 @@ pub mod fsync { pub struct Arg { val: t, opt_level: Option, - fsync_fn: @fn(f: &t, Level) -> int, + fsync_fn: extern "Rust" fn(f: &t, Level) -> int, } // fsync file after executing blk // FIXME (#2004) find better way to create resources within lifetime of // outer res - pub fn FILE_res_sync(file: &FILERes, opt_level: Option, + pub fn FILE_res_sync(file: &FILERes, + opt_level: Option, blk: &fn(v: Res<*libc::FILE>)) { blk(Res::new(Arg { - val: file.f, opt_level: opt_level, - fsync_fn: |file, l| fsync_fd(fileno(*file), l) + val: file.f, + opt_level: opt_level, + fsync_fn: fsync_FILE, })); fn fileno(stream: *libc::FILE) -> libc::c_int { #[fixed_stack_segment]; #[inline(never)]; unsafe { libc::fileno(stream) } } + + fn fsync_FILE(stream: &*libc::FILE, level: Level) -> int { + fsync_fd(fileno(*stream), level) + } } // fsync fd after executing blk pub fn fd_res_sync(fd: &FdRes, opt_level: Option, blk: &fn(v: Res)) { blk(Res::new(Arg { - val: fd.fd, opt_level: opt_level, - fsync_fn: |fd, l| fsync_fd(*fd, l) + val: fd.fd, + opt_level: opt_level, + fsync_fn: fsync_fd_helper, })); } @@ -1880,6 +1887,10 @@ pub mod fsync { os::fsync_fd(fd, level) as int } + fn fsync_fd_helper(fd_ptr: &libc::c_int, level: Level) -> int { + fsync_fd(*fd_ptr, level) + } + // Type of objects that may want to fsync pub trait FSyncable { fn fsync(&self, l: Level) -> int; } @@ -1887,10 +1898,15 @@ pub mod fsync { pub fn obj_sync(o: @FSyncable, opt_level: Option, blk: &fn(v: Res<@FSyncable>)) { blk(Res::new(Arg { - val: o, opt_level: opt_level, - fsync_fn: |o, l| (*o).fsync(l) + val: o, + opt_level: opt_level, + fsync_fn: obj_fsync_fn, })); } + + fn obj_fsync_fn(o: &@FSyncable, level: Level) -> int { + (*o).fsync(level) + } } #[cfg(test)] diff --git a/src/libstd/reflect.rs b/src/libstd/reflect.rs index 91e3719e3d0..833a9f5ed82 100644 --- a/src/libstd/reflect.rs +++ b/src/libstd/reflect.rs @@ -485,9 +485,11 @@ impl TyVisitor for MovePtrAdaptor { } fn visit_closure_ptr(&mut self, ck: uint) -> bool { - self.align_to::<@fn()>(); - if ! self.inner.visit_closure_ptr(ck) { return false; } - self.bump_past::<@fn()>(); + self.align_to::<~fn()>(); + if ! self.inner.visit_closure_ptr(ck) { + return false + } + self.bump_past::<~fn()>(); true } } diff --git a/src/libstd/unstable/finally.rs b/src/libstd/unstable/finally.rs index 6833ca6d7cf..d98c13083de 100644 --- a/src/libstd/unstable/finally.rs +++ b/src/libstd/unstable/finally.rs @@ -55,7 +55,6 @@ impl<'self,T> Finally for &'self fn() -> T { } finally_fn!(~fn() -> T) -finally_fn!(@fn() -> T) finally_fn!(extern "Rust" fn() -> T) struct Finallyalizer<'self> { -- cgit 1.4.1-3-g733a5