about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libcore/rt/sched/mod.rs18
1 files changed, 6 insertions, 12 deletions
diff --git a/src/libcore/rt/sched/mod.rs b/src/libcore/rt/sched/mod.rs
index 8fb8e2a1d10..08c52d8e8d4 100644
--- a/src/libcore/rt/sched/mod.rs
+++ b/src/libcore/rt/sched/mod.rs
@@ -46,17 +46,13 @@ pub struct Scheduler {
 // XXX: Some hacks to put a &fn in Scheduler without borrowck
 // complaining
 type UnsafeTaskReceiver = sys::Closure;
-trait HackAroundBorrowCk {
+trait ClosureConverter {
     fn from_fn(&fn(~Task)) -> Self;
     fn to_fn(self) -> &fn(~Task);
 }
-impl HackAroundBorrowCk for UnsafeTaskReceiver {
-    fn from_fn(f: &fn(~Task)) -> UnsafeTaskReceiver {
-        unsafe { transmute(f) }
-    }
-    fn to_fn(self) -> &fn(~Task) {
-        unsafe { transmute(self) }
-    }
+impl ClosureConverter for UnsafeTaskReceiver {
+    fn from_fn(f: &fn(~Task)) -> UnsafeTaskReceiver { unsafe { transmute(f) } }
+    fn to_fn(self) -> &fn(~Task) { unsafe { transmute(self) } }
 }
 
 enum CleanupJob {
@@ -223,10 +219,8 @@ pub impl Scheduler {
         rtdebug!("blocking task");
 
         let blocked_task = self.current_task.swap_unwrap();
-        let f_fake_region = unsafe {
-            transmute::<&fn(~Task), &fn(~Task)>(f)
-        };
-        let f_opaque = HackAroundBorrowCk::from_fn(f_fake_region);
+        let f_fake_region = unsafe { transmute::<&fn(~Task), &fn(~Task)>(f) };
+        let f_opaque = ClosureConverter::from_fn(f_fake_region);
         self.enqueue_cleanup_job(GiveTask(blocked_task, f_opaque));
 
         local::put(self);