Add a demoded version of ptr::addr_of
Currently, the new version is ptr::p2::addr_of and the old one is ptr::addr_of. This is kind of cheesy, but I need a snapshot before I can ditch the old version, since the pipe compiler generates calls to addr_of. core is converted over to use the new version, std is not.
This commit is contained in:
parent
f1014c43fd
commit
3639d38d5c
23 changed files with 110 additions and 94 deletions
|
@ -66,7 +66,7 @@ use rt::rust_task;
|
|||
use rt::rust_closure;
|
||||
|
||||
macro_rules! move_it (
|
||||
{ $x:expr } => { unsafe { let y <- *ptr::addr_of($x); move y } }
|
||||
{ $x:expr } => { unsafe { let y <- *ptr::p2::addr_of(&($x)); move y } }
|
||||
)
|
||||
|
||||
type TaskSet = send_map::linear::LinearMap<*rust_task,()>;
|
||||
|
@ -511,7 +511,14 @@ fn spawn_raw(+opts: TaskOpts, +f: fn~()) {
|
|||
|
||||
let child_wrapper = make_child_wrapper(new_task, move child_tg,
|
||||
move ancestors, is_main, move notify_chan, move f);
|
||||
let fptr = ptr::addr_of(child_wrapper);
|
||||
/*
|
||||
Truly awful, but otherwise the borrow checker complains about
|
||||
the move in the last line of this block, for reasons I can't
|
||||
understand. -- tjc
|
||||
*/
|
||||
let tmp: u64 = cast::reinterpret_cast(&(&child_wrapper));
|
||||
let whatever: &~fn() = cast::reinterpret_cast(&tmp);
|
||||
let fptr = ptr::p2::addr_of(whatever);
|
||||
let closure: *rust_closure = cast::reinterpret_cast(&fptr);
|
||||
|
||||
// Getting killed between these two calls would free the child's
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue