diff --git a/src/libcore/at_vec.rs b/src/libcore/at_vec.rs index bfc5da65214..e2749a5bd57 100644 --- a/src/libcore/at_vec.rs +++ b/src/libcore/at_vec.rs @@ -177,7 +177,7 @@ mod unsafe { (**repr).fill += sys::size_of::(); let p = ptr::addr_of((**repr).data); let p = ptr::offset(p, fill) as *mut T; - rusti::move_val_init(*p, initval); + rusti::move_val_init(*p, move initval); } unsafe fn push_slow(&v: @[const T], +initval: T) { diff --git a/src/libcore/comm.rs b/src/libcore/comm.rs index c85557c6cd8..f9db36f0fc1 100644 --- a/src/libcore/comm.rs +++ b/src/libcore/comm.rs @@ -181,7 +181,7 @@ fn send(ch: Chan, +data: T) { let res = rustrt::rust_port_id_send(p, data_ptr); if res != 0 unsafe { // Data sent successfully - unsafe::forget(data); + unsafe::forget(move data); } task::yield(); } diff --git a/src/libcore/dlist.rs b/src/libcore/dlist.rs index a7acceb1fe3..58c7edd33cd 100644 --- a/src/libcore/dlist.rs +++ b/src/libcore/dlist.rs @@ -198,27 +198,27 @@ impl DList { /// Add data to the head of the list. O(1). fn push_head(+data: T) { - self.add_head(self.new_link(data)); + self.add_head(self.new_link(move data)); } /** * Add data to the head of the list, and get the new containing * node. O(1). */ fn push_head_n(+data: T) -> DListNode { - let mut nobe = self.new_link(data); + let mut nobe = self.new_link(move data); self.add_head(nobe); option::get(nobe) } /// Add data to the tail of the list. O(1). fn push(+data: T) { - self.add_tail(self.new_link(data)); + self.add_tail(self.new_link(move data)); } /** * Add data to the tail of the list, and get the new containing * node. O(1). */ fn push_n(+data: T) -> DListNode { - let mut nobe = self.new_link(data); + let mut nobe = self.new_link(move data); self.add_tail(nobe); option::get(nobe) } @@ -227,7 +227,7 @@ impl DList { * O(1). */ fn insert_before(+data: T, neighbour: DListNode) { - self.insert_left(self.new_link(data), neighbour); + self.insert_left(self.new_link(move data), neighbour); } /** * Insert an existing node in the middle of the list, left of the @@ -242,7 +242,7 @@ impl DList { * and get its containing node. O(1). */ fn insert_before_n(+data: T, neighbour: DListNode) -> DListNode { - let mut nobe = self.new_link(data); + let mut nobe = self.new_link(move data); self.insert_left(nobe, neighbour); option::get(nobe) } @@ -251,7 +251,7 @@ impl DList { * O(1). */ fn insert_after(+data: T, neighbour: DListNode) { - self.insert_right(neighbour, self.new_link(data)); + self.insert_right(neighbour, self.new_link(move data)); } /** * Insert an existing node in the middle of the list, right of the @@ -266,7 +266,7 @@ impl DList { * and get its containing node. O(1). */ fn insert_after_n(+data: T, neighbour: DListNode) -> DListNode { - let mut nobe = self.new_link(data); + let mut nobe = self.new_link(move data); self.insert_right(neighbour, nobe); option::get(nobe) } diff --git a/src/libcore/dvec.rs b/src/libcore/dvec.rs index 35424a38fd8..ed8a814bba8 100644 --- a/src/libcore/dvec.rs +++ b/src/libcore/dvec.rs @@ -95,7 +95,7 @@ priv impl DVec { data <-> self.data; let data_ptr: *() = unsafe::reinterpret_cast(&data); if data_ptr.is_null() { fail ~"Recursive use of dvec"; } - return f(data); + return f(move data); } } @@ -123,7 +123,7 @@ impl DVec { */ #[inline(always)] fn swap(f: fn(-~[mut A]) -> ~[mut A]) { - self.check_out(|v| self.give_back(f(v))) + self.check_out(|v| self.give_back(f(move v))) } /// Returns the number of elements currently in the dvec @@ -131,7 +131,7 @@ impl DVec { unchecked { do self.check_out |v| { let l = v.len(); - self.give_back(v); + self.give_back(move v); l } } @@ -148,7 +148,7 @@ impl DVec { do self.check_out |v| { let mut v <- v; let result = vec::pop(v); - self.give_back(v); + self.give_back(move v); move result } } @@ -162,7 +162,7 @@ impl DVec { if data_ptr.is_null() { fail ~"Recursive use of dvec"; } log(error, ~"a"); self.data <- ~[mut move t]; - vec::push_all_move(self.data, data); + vec::push_all_move(self.data, move data); log(error, ~"b"); } } @@ -187,7 +187,7 @@ impl DVec { fn reverse() { do self.check_out |v| { vec::reverse(v); - self.give_back(v); + self.give_back(move v); } } @@ -195,7 +195,7 @@ impl DVec { fn borrow(op: fn(x: &[A]) -> R) -> R { do self.check_out |v| { let result = op(v); - self.give_back(v); + self.give_back(move v); move result } } @@ -204,7 +204,7 @@ impl DVec { fn borrow_mut(op: fn(x: &[mut A]) -> R) -> R { do self.check_out |v| { let result = op(v); - self.give_back(v); + self.give_back(move v); move result } } @@ -269,7 +269,7 @@ impl DVec { unchecked { do self.check_out |v| { let w = vec::from_mut(copy v); - self.give_back(v); + self.give_back(move v); move w } } diff --git a/src/libcore/future.rs b/src/libcore/future.rs index 8ae8f632083..94f7aa8f3c5 100644 --- a/src/libcore/future.rs +++ b/src/libcore/future.rs @@ -90,7 +90,7 @@ fn from_port(+port: future_pipe::client::waiting) -> Future { do from_fn |move port| { let mut port_ = None; port_ <-> *port; - let port = option::unwrap(port_); + let port = option::unwrap(move port_); match recv(move port) { future_pipe::completed(move data) => move data } diff --git a/src/libcore/option.rs b/src/libcore/option.rs index f97afb317a7..f8f1c9df4e4 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -74,7 +74,7 @@ pure fn map_consume(+opt: Option, f: fn(+T) -> U) -> Option { * As `map`, but consumes the option and gives `f` ownership to avoid * copying. */ - if opt.is_some() { Some(f(option::unwrap(opt))) } else { None } + if opt.is_some() { Some(f(option::unwrap(move opt))) } else { None } } pure fn chain(opt: Option, f: fn(T) -> Option) -> Option { @@ -112,7 +112,7 @@ pure fn while_some(+x: Option, blk: fn(+T) -> Option) { let mut opt <- x; while opt.is_some() { - opt = blk(unwrap(opt)); + opt = blk(unwrap(move opt)); } } @@ -186,7 +186,7 @@ fn swap_unwrap(opt: &mut Option) -> T { pure fn unwrap_expect(+opt: Option, reason: &str) -> T { //! As unwrap, but with a specified failure message. if opt.is_none() { fail reason.to_unique(); } - unwrap(opt) + unwrap(move opt) } // Some of these should change to be &Option, some should not. See below. diff --git a/src/libcore/pipes.rs b/src/libcore/pipes.rs index 0ed0904b1b9..1bc706d16d1 100644 --- a/src/libcore/pipes.rs +++ b/src/libcore/pipes.rs @@ -272,7 +272,7 @@ fn packet() -> *Packet { let b = unibuffer(); let p = ptr::addr_of(b.data); // We'll take over memory management from here. - unsafe { forget(b) } + unsafe { forget(move b) } p } @@ -283,7 +283,7 @@ fn entangle_buffer( -> (SendPacketBuffered, RecvPacketBuffered) { let p = init(unsafe { reinterpret_cast(&buffer) }, &buffer.data); - unsafe { forget(buffer) } + unsafe { forget(move buffer) } (SendPacketBuffered(p), RecvPacketBuffered(p)) } @@ -320,7 +320,7 @@ fn swap_task(+dst: &mut *rust_task, src: *rust_task) -> *rust_task { // It might be worth making both acquire and release versions of // this. unsafe { - transmute(rusti::atomic_xchg(transmute(dst), src as int)) + transmute(rusti::atomic_xchg(transmute(move dst), src as int)) } } @@ -357,14 +357,14 @@ fn wait_event(this: *rust_task) -> *libc::c_void { #[doc(hidden)] fn swap_state_acq(+dst: &mut State, src: State) -> State { unsafe { - transmute(rusti::atomic_xchg_acq(transmute(dst), src as int)) + transmute(rusti::atomic_xchg_acq(transmute(move dst), src as int)) } } #[doc(hidden)] fn swap_state_rel(+dst: &mut State, src: State) -> State { unsafe { - transmute(rusti::atomic_xchg_rel(transmute(dst), src as int)) + transmute(rusti::atomic_xchg_rel(transmute(move dst), src as int)) } } @@ -389,7 +389,7 @@ struct BufferResource { // go go gadget drop glue } else { - forget(b) + forget(move b) } } } @@ -488,7 +488,7 @@ fn try_recv(+p: RecvPacketBuffered) let mut payload = None; payload <-> p.payload; p.header.state = Empty; - return Some(option::unwrap(payload)) + return Some(option::unwrap(move payload)) }, Terminated => return None, _ => {} @@ -534,7 +534,7 @@ fn try_recv(+p: RecvPacketBuffered) rustrt::rust_task_deref(old_task); } p.header.state = Empty; - return Some(option::unwrap(payload)) + return Some(option::unwrap(move payload)) } Terminated => { // This assert detects when we've accidentally unsafely @@ -789,7 +789,7 @@ struct SendPacketBuffered { if self.p != None { let mut p = None; p <-> self.p; - sender_terminate(option::unwrap(p)) + sender_terminate(option::unwrap(move p)) } //unsafe { error!("send_drop: %?", // if self.buffer == none { @@ -814,7 +814,7 @@ impl SendPacketBuffered { fn unwrap() -> *Packet { let mut p = None; p <-> self.p; - option::unwrap(p) + option::unwrap(move p) } pure fn header() -> *PacketHeader { @@ -833,7 +833,7 @@ impl SendPacketBuffered { //error!("send reuse_buffer"); let mut tmp = None; tmp <-> self.buffer; - option::unwrap(tmp) + option::unwrap(move tmp) } } @@ -873,7 +873,7 @@ struct RecvPacketBuffered { if self.p != None { let mut p = None; p <-> self.p; - receiver_terminate(option::unwrap(p)) + receiver_terminate(option::unwrap(move p)) } //unsafe { error!("recv_drop: %?", // if self.buffer == none { @@ -886,7 +886,7 @@ impl RecvPacketBuffered : Selectable { fn unwrap() -> *Packet { let mut p = None; p <-> self.p; - option::unwrap(p) + option::unwrap(move p) } pure fn header() -> *PacketHeader { @@ -905,7 +905,7 @@ impl RecvPacketBuffered : Selectable { //error!("recv reuse_buffer"); let mut tmp = None; tmp <-> self.buffer; - option::unwrap(tmp) + option::unwrap(move tmp) } } @@ -954,7 +954,7 @@ fn spawn_service( do task::spawn |move service, move server| { let mut server_ = None; server_ <-> *server; - service(option::unwrap(server_)) + service(option::unwrap(move server_)) } move client @@ -978,7 +978,7 @@ fn spawn_service_recv( do task::spawn |move service, move server| { let mut server_ = None; server_ <-> *server; - service(option::unwrap(server_)) + service(option::unwrap(move server_)) } move client @@ -1054,13 +1054,13 @@ impl Chan: Channel { let mut endp = None; endp <-> self.endp; self.endp = Some( - streamp::client::data(unwrap(endp), move x)) + streamp::client::data(unwrap(move endp), move x)) } fn try_send(+x: T) -> bool { let mut endp = None; endp <-> self.endp; - match move streamp::client::try_data(unwrap(endp), move x) { + match move streamp::client::try_data(unwrap(move endp), move x) { Some(move next) => { self.endp = Some(move next); true @@ -1074,7 +1074,7 @@ impl Port: Recv { fn recv() -> T { let mut endp = None; endp <-> self.endp; - let streamp::data(x, endp) = pipes::recv(unwrap(endp)); + let streamp::data(x, endp) = pipes::recv(unwrap(move endp)); self.endp = Some(move endp); move x } @@ -1082,7 +1082,7 @@ impl Port: Recv { fn try_recv() -> Option { let mut endp = None; endp <-> self.endp; - match move pipes::try_recv(unwrap(endp)) { + match move pipes::try_recv(unwrap(move endp)) { Some(streamp::data(move x, move endp)) => { self.endp = Some(move endp); Some(move x) @@ -1180,7 +1180,7 @@ impl SharedChan: Channel { do self.with |chan| { let mut x = None; x <-> xx; - chan.send(option::unwrap(x)) + chan.send(option::unwrap(move x)) } } @@ -1189,7 +1189,7 @@ impl SharedChan: Channel { do self.with |chan| { let mut x = None; x <-> xx; - chan.try_send(option::unwrap(x)) + chan.try_send(option::unwrap(move x)) } } } @@ -1260,7 +1260,7 @@ fn try_recv_one (+port: PortOne) -> Option { if message.is_none() { None } else { - let oneshot::send(message) = option::unwrap(message); + let oneshot::send(message) = option::unwrap(move message); Some(move message) } } diff --git a/src/libcore/send_map.rs b/src/libcore/send_map.rs index 3fe921aa1e7..a15c2f01659 100644 --- a/src/libcore/send_map.rs +++ b/src/libcore/send_map.rs @@ -337,7 +337,7 @@ mod linear { if value.is_none() { fail fmt!("No entry found for key: %?", k); } - option::unwrap(value) + option::unwrap(move value) } } diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 86073915f41..3a2aa0b0f0d 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -149,8 +149,7 @@ pure fn from_slice(s: &str) -> ~str { */ pure fn from_byte(b: u8) -> ~str { assert b < 128u8; - let mut v = ~[b, 0u8]; - unsafe { ::unsafe::transmute(v) } + unsafe { ::unsafe::transmute(~[b, 0u8]) } } /// Appends a character at the end of a string @@ -437,8 +436,7 @@ Section: Transforming strings * The result vector is not null-terminated. */ pure fn to_bytes(s: &str) -> ~[u8] unsafe { - let mut s_copy = from_slice(s); - let mut v: ~[u8] = ::unsafe::transmute(s_copy); + let mut v: ~[u8] = ::unsafe::transmute(from_slice(s)); vec::unsafe::set_len(v, len(s)); move v } @@ -1997,7 +1995,7 @@ mod unsafe { vec::push(v, 0u8); assert is_utf8(v); - return ::unsafe::transmute(v); + return ::unsafe::transmute(move v); } /// Create a Rust string from a *u8 buffer of the given length @@ -2005,7 +2003,7 @@ mod unsafe { unsafe fn from_buf_len_nocopy(buf: &a / *u8, len: uint) -> &a / str { let v = (*buf, len + 1); assert is_utf8(::unsafe::reinterpret_cast(&v)); - return ::unsafe::transmute(v); + return ::unsafe::transmute(move v); } /// Create a Rust string from a null-terminated C string @@ -2052,7 +2050,7 @@ mod unsafe { } vec::unsafe::set_len(v, end - begin); vec::push(v, 0u8); - ::unsafe::transmute(v) + ::unsafe::transmute(move v) } } } diff --git a/src/libcore/task.rs b/src/libcore/task.rs index 851671f910c..8f186d86168 100644 --- a/src/libcore/task.rs +++ b/src/libcore/task.rs @@ -574,7 +574,7 @@ impl TaskBuilder { do fr_task_builder.spawn |move f| { comm::send(ch, f()); } - match future::get(&option::unwrap(result)) { + match future::get(&option::unwrap(move result)) { Success => result::Ok(comm::recv(po)), Failure => result::Err(()) } @@ -972,7 +972,7 @@ fn each_ancestor(list: &mut AncestorList, if coalesce_this.is_some() { // Needed coalesce. Our next ancestor becomes our old // ancestor's next ancestor. ("next = old_next->next;") - *list <- option::unwrap(coalesce_this); + *list <- option::unwrap(move coalesce_this); } else { // No coalesce; restore from tmp. ("next = old_next;") *list <- tmp_list; @@ -1144,7 +1144,7 @@ fn enlist_in_taskgroup(state: TaskGroupInner, me: *rust_task, let newstate = util::replace(state, None); // If 'None', the group was failing. Can't enlist. if newstate.is_some() { - let group = option::unwrap(newstate); + let group = option::unwrap(move newstate); taskset_insert(if is_member { &mut group.members } else { &mut group.descendants }, me); *state = Some(move group); @@ -1159,7 +1159,7 @@ fn leave_taskgroup(state: TaskGroupInner, me: *rust_task, is_member: bool) { let newstate = util::replace(state, None); // If 'None', already failing and we've already gotten a kill signal. if newstate.is_some() { - let group = option::unwrap(newstate); + let group = option::unwrap(move newstate); taskset_remove(if is_member { &mut group.members } else { &mut group.descendants }, me); *state = Some(move group); @@ -1181,7 +1181,7 @@ fn kill_taskgroup(state: TaskGroupInner, me: *rust_task, is_main: bool) { // That's ok; only one task needs to do the dirty work. (Might also // see 'None' if Somebody already failed and we got a kill signal.) if newstate.is_some() { - let group = option::unwrap(newstate); + let group = option::unwrap(move newstate); for taskset_each(&group.members) |+sibling| { // Skip self - killing ourself won't do much good. if sibling != me { @@ -1277,7 +1277,7 @@ fn gen_child_taskgroup(linked: bool, supervised: bool) // None { ancestor_list(None) } let tmp = util::replace(&mut **ancestors, None); if tmp.is_some() { - let ancestor_arc = option::unwrap(tmp); + let ancestor_arc = option::unwrap(move tmp); let result = ancestor_arc.clone(); **ancestors <- Some(move ancestor_arc); AncestorList(Some(move result)) @@ -1319,7 +1319,7 @@ fn spawn_raw(+opts: TaskOpts, +f: fn~()) { // closure. (Reordering them wouldn't help - then getting killed // between them would leak.) rustrt::start_task(new_task, closure); - unsafe::forget(child_wrapper); + unsafe::forget(move child_wrapper); } } @@ -1500,7 +1500,7 @@ unsafe fn get_task_local_map(task: *rust_task) -> TaskLocalMap { unsafe::bump_box_refcount(map); map } else { - let map = unsafe::transmute(map_ptr); + let map = unsafe::transmute(move map_ptr); unsafe::bump_box_refcount(map); map } @@ -1546,7 +1546,7 @@ unsafe fn local_get_helper( // overwriting the local_data_box we need to give an extra reference. // We must also give an extra reference when not removing. let (index, data_ptr) = result; - let data: @T = unsafe::transmute(data_ptr); + let data: @T = unsafe::transmute(move data_ptr); unsafe::bump_box_refcount(data); if do_pop { (*map).set_elt(index, None); @@ -1608,7 +1608,7 @@ unsafe fn local_modify( // Could be more efficient by doing the lookup work, but this is easy. let newdata = modify_fn(local_pop(task, key)); if newdata.is_some() { - local_set(task, key, option::unwrap(newdata)); + local_set(task, key, option::unwrap(move newdata)); } } diff --git a/src/libcore/unsafe.rs b/src/libcore/unsafe.rs index 0bb08c82011..14205f39e9f 100644 --- a/src/libcore/unsafe.rs +++ b/src/libcore/unsafe.rs @@ -32,15 +32,15 @@ unsafe fn reinterpret_cast(src: &T) -> U { * reinterpret_cast on managed pointer types. */ #[inline(always)] -unsafe fn forget(-thing: T) { rusti::forget(thing); } +unsafe fn forget(-thing: T) { rusti::forget(move thing); } /** * Force-increment the reference count on a shared box. If used - * uncarefully, this can leak the box. Use this in conjunction with transmute + * carelessly, this can leak the box. Use this in conjunction with transmute * and/or reinterpret_cast when such calls would otherwise scramble a box's * reference count */ -unsafe fn bump_box_refcount(+t: @T) { forget(t); } +unsafe fn bump_box_refcount(+t: @T) { forget(move t); } /** * Transform a value of one type into a value of another type. @@ -51,23 +51,26 @@ unsafe fn bump_box_refcount(+t: @T) { forget(t); } * assert transmute("L") == ~[76u8, 0u8]; */ unsafe fn transmute(-thing: L) -> G { - let newthing = reinterpret_cast(&thing); - forget(thing); + debug!(">>> in transmute! <<<"); + debug!("transmute 1: %?", &thing); + let newthing: G = reinterpret_cast(&thing); + forget(move thing); + debug!("transmute 2: %?", &newthing); move newthing } /// Coerce an immutable reference to be mutable. -unsafe fn transmute_mut(+ptr: &a/T) -> &a/mut T { transmute(ptr) } +unsafe fn transmute_mut(+ptr: &a/T) -> &a/mut T { transmute(move ptr) } /// Coerce a mutable reference to be immutable. -unsafe fn transmute_immut(+ptr: &a/mut T) -> &a/T { transmute(ptr) } +unsafe fn transmute_immut(+ptr: &a/mut T) -> &a/T { transmute(move ptr) } /// Coerce a borrowed pointer to have an arbitrary associated region. -unsafe fn transmute_region(+ptr: &a/T) -> &b/T { transmute(ptr) } +unsafe fn transmute_region(+ptr: &a/T) -> &b/T { transmute(move ptr) } /// Coerce a borrowed mutable pointer to have an arbitrary associated region. unsafe fn transmute_mut_region(+ptr: &a/mut T) -> &b/mut T { - transmute(ptr) + transmute(move ptr) } /// Transforms lifetime of the second pointer to match the first. @@ -117,7 +120,7 @@ struct ArcDestruct { // Unkillable wait. Message guaranteed to come. if pipes::recv_one(move response) { // Other task got the data. - unsafe::forget(data); + unsafe::forget(move data); } else { // Other task was killed. drop glue takes over. } @@ -125,7 +128,7 @@ struct ArcDestruct { // drop glue takes over. } } else { - unsafe::forget(data); + unsafe::forget(move data); } } } @@ -163,7 +166,7 @@ unsafe fn unwrap_shared_mutable_state(+rc: SharedMutableState) let (c1,p1) = pipes::oneshot(); // () let (c2,p2) = pipes::oneshot(); // bool let server: UnwrapProto = ~mut Some((move c1,move p2)); - let serverp: libc::uintptr_t = unsafe::transmute(server); + let serverp: libc::uintptr_t = unsafe::transmute(move server); // Try to put our server end in the unwrapper slot. if rustrt::rust_compare_and_swap_ptr(&mut ptr.unwrapper, 0, serverp) { // Got in. Step 0: Tell destructor not to run. We are now it. @@ -174,7 +177,7 @@ unsafe fn unwrap_shared_mutable_state(+rc: SharedMutableState) if new_count == 0 { // We were the last owner. Can unwrap immediately. // Also we have to free the server endpoints. - let _server: UnwrapProto = unsafe::transmute(serverp); + let _server: UnwrapProto = unsafe::transmute(move serverp); option::swap_unwrap(&mut ptr.data) // drop glue takes over. } else { @@ -194,9 +197,9 @@ unsafe fn unwrap_shared_mutable_state(+rc: SharedMutableState) } } else { // Somebody else was trying to unwrap. Avoid guaranteed deadlock. - unsafe::forget(ptr); + unsafe::forget(move ptr); // Also we have to free the (rejected) server endpoints. - let _server: UnwrapProto = unsafe::transmute(serverp); + let _server: UnwrapProto = unsafe::transmute(move serverp); fail ~"Another task is already unwrapping this ARC!"; } } @@ -213,7 +216,7 @@ type SharedMutableState = ArcDestruct; unsafe fn shared_mutable_state(+data: T) -> SharedMutableState { let data = ~ArcData { count: 1, unwrapper: 0, data: Some(move data) }; unsafe { - let ptr = unsafe::transmute(data); + let ptr = unsafe::transmute(move data); ArcDestruct(ptr) } } @@ -226,7 +229,7 @@ unsafe fn get_shared_mutable_state(rc: &a/SharedMutableState) assert ptr.count > 0; // Cast us back into the correct region let r = unsafe::transmute_region(option::get_ref(&ptr.data)); - unsafe::forget(ptr); + unsafe::forget(move ptr); return unsafe::transmute_mut(r); } } @@ -238,7 +241,7 @@ unsafe fn get_shared_immutable_state(rc: &a/SharedMutableState) assert ptr.count > 0; // Cast us back into the correct region let r = unsafe::transmute_region(option::get_ref(&ptr.data)); - unsafe::forget(ptr); + unsafe::forget(move ptr); return r; } } @@ -249,7 +252,7 @@ unsafe fn clone_shared_mutable_state(rc: &SharedMutableState) let ptr: ~ArcData = unsafe::reinterpret_cast(&(*rc).data); let new_count = rustrt::rust_atomic_increment(&mut ptr.count); assert new_count >= 2; - unsafe::forget(ptr); + unsafe::forget(move ptr); } ArcDestruct((*rc).data) } diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index b4985389e25..38340c2b8d1 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -271,12 +271,12 @@ pure fn build_sized_opt(size: Option, /// Produces a mut vector from an immutable vector. pure fn to_mut(+v: ~[T]) -> ~[mut T] { - unsafe { ::unsafe::transmute(v) } + unsafe { ::unsafe::transmute(move v) } } /// Produces an immutable vector from a mut vector. pure fn from_mut(+v: ~[mut T]) -> ~[T] { - unsafe { ::unsafe::transmute(v) } + unsafe { ::unsafe::transmute(move v) } } // Accessors @@ -580,7 +580,7 @@ unsafe fn push_fast(&v: ~[const T], +initval: T) { (**repr).fill += sys::size_of::(); let p = ptr::addr_of((**repr).data); let p = ptr::offset(p, fill) as *mut T; - rusti::move_val_init(*p, initval); + rusti::move_val_init(*p, move initval); } #[inline(never)] @@ -1835,7 +1835,7 @@ mod unsafe { let mut box2 = None; box2 <-> box; rusti::move_val_init(*ptr::mut_offset(p, i), - option::unwrap(box2)); + option::unwrap(move box2)); } } diff --git a/src/libstd/bitv.rs b/src/libstd/bitv.rs index 3482329efde..ae696d912cd 100644 --- a/src/libstd/bitv.rs +++ b/src/libstd/bitv.rs @@ -221,7 +221,7 @@ fn Bitv (nbits: uint, init: bool) -> Bitv { if nbits % uint_bits == 0 {0} else {1}; let elem = if init {!0} else {0}; let s = to_mut(from_elem(nelems, elem)); - Big(~BigBitv(s)) + Big(~BigBitv(move s)) }; Bitv {rep: rep, nbits: nbits} } diff --git a/src/libstd/cell.rs b/src/libstd/cell.rs index 8948d66f7ab..bc16aa2e03e 100644 --- a/src/libstd/cell.rs +++ b/src/libstd/cell.rs @@ -26,7 +26,7 @@ impl Cell { let mut value = None; value <-> self.value; - return option::unwrap(value); + return option::unwrap(move value); } /// Returns the value, failing if the cell is full. diff --git a/src/libstd/deque.rs b/src/libstd/deque.rs index 0935834eb44..1eac198c773 100644 --- a/src/libstd/deque.rs +++ b/src/libstd/deque.rs @@ -57,7 +57,7 @@ fn create() -> Deque { self.lo = self.elts.len() - 1u; } else { self.lo -= 1u; } if self.lo == self.hi { - self.elts.swap(|v| grow(self.nelts, oldlo, v)); + self.elts.swap(|v| grow(self.nelts, oldlo, move v)); self.lo = self.elts.len() - 1u; self.hi = self.nelts; } @@ -66,7 +66,7 @@ fn create() -> Deque { } fn add_back(t: T) { if self.lo == self.hi && self.nelts != 0u { - self.elts.swap(|v| grow(self.nelts, self.lo, v)); + self.elts.swap(|v| grow(self.nelts, self.lo, move v)); self.lo = 0u; self.hi = self.nelts; } @@ -111,7 +111,7 @@ fn create() -> Deque { vec::to_mut( vec::from_elem(initial_capacity, None))) }; - move (repr as Deque::) + (move repr) as Deque:: } #[cfg(test)] diff --git a/src/libstd/map.rs b/src/libstd/map.rs index a24d360beca..dad1fd6f6f9 100644 --- a/src/libstd/map.rs +++ b/src/libstd/map.rs @@ -279,7 +279,7 @@ mod chained { if opt_v.is_none() { fail fmt!("Key not found in table: %?", k); } - option::unwrap(opt_v) + option::unwrap(move opt_v) } fn remove(+k: K) -> bool { diff --git a/src/libstd/net_ip.rs b/src/libstd/net_ip.rs index 77333130cf5..a6357c9fbb7 100644 --- a/src/libstd/net_ip.rs +++ b/src/libstd/net_ip.rs @@ -275,7 +275,7 @@ extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, result::Err(GetAddrUnknownError)); break; }; - out_vec += ~[new_ip_addr]; + out_vec += ~[move new_ip_addr]; let next_addr = ll::get_next_addrinfo(curr_addr); if next_addr == ptr::null::() as *addrinfo { @@ -289,7 +289,7 @@ extern fn get_addr_cb(handle: *uv_getaddrinfo_t, status: libc::c_int, } log(debug, fmt!("successful process addrinfo result, len: %?", vec::len(out_vec))); - (*handle_data).output_ch.send(result::Ok(out_vec)); + (*handle_data).output_ch.send(result::Ok(move out_vec)); } else { log(debug, ~"addrinfo pointer is NULL"); diff --git a/src/libstd/net_tcp.rs b/src/libstd/net_tcp.rs index 9bf893b0961..d4eb5ce6998 100644 --- a/src/libstd/net_tcp.rs +++ b/src/libstd/net_tcp.rs @@ -155,7 +155,7 @@ fn connect(-input_ip: ip::IpAddr, port: uint, // we can send into the interact cb to be handled in libuv.. log(debug, fmt!("stream_handle_ptr outside interact %?", stream_handle_ptr)); - do iotask::interact(iotask) |loop_ptr| unsafe { + do iotask::interact(iotask) |move input_ip, loop_ptr| unsafe { log(debug, ~"in interact cb for tcp client connect.."); log(debug, fmt!("stream_handle_ptr in interact %?", stream_handle_ptr)); @@ -575,7 +575,7 @@ fn listen(-host_ip: ip::IpAddr, port: uint, backlog: uint, +new_connect_cb: fn~(TcpNewConnection, comm::Chan>)) -> result::Result<(), TcpListenErrData> unsafe { - do listen_common(host_ip, port, backlog, iotask, on_establish_cb) + do listen_common(move host_ip, port, backlog, iotask, on_establish_cb) // on_connect_cb |move new_connect_cb, handle| unsafe { let server_data_ptr = uv::ll::get_data_for_uv_handle(handle) @@ -600,7 +600,7 @@ fn listen_common(-host_ip: ip::IpAddr, port: uint, backlog: uint, server_stream_ptr: server_stream_ptr, stream_closed_ch: core::comm::Chan(stream_closed_po), kill_ch: kill_ch, - on_connect_cb: on_connect_cb, + on_connect_cb: move on_connect_cb, iotask: iotask, mut active: true }; @@ -614,7 +614,7 @@ fn listen_common(-host_ip: ip::IpAddr, port: uint, backlog: uint, // tcp::connect (because the iotask::interact cb isn't // nested within a core::comm::listen block) let loc_ip = copy(host_ip); - do iotask::interact(iotask) |loop_ptr| unsafe { + do iotask::interact(iotask) |move loc_ip, loop_ptr| unsafe { match uv::ll::tcp_init(loop_ptr, server_stream_ptr) { 0i32 => { uv::ll::set_data_for_uv_handle( @@ -739,7 +739,7 @@ impl TcpSocket { fn read_stop(-read_port: comm::Port>) -> result::Result<(), TcpErrData> { - read_stop(self, read_port) + read_stop(self, move read_port) } fn read(timeout_msecs: uint) -> result::Result<~[u8], TcpErrData> { @@ -1491,7 +1491,8 @@ mod test { cont_ch: comm::Chan<()>, iotask: IoTask) -> ~str { let server_ip_addr = ip::v4::parse_addr(server_ip); - let listen_result = listen(server_ip_addr, server_port, 128u, iotask, + let listen_result = listen(move server_ip_addr, server_port, 128, + iotask, // on_establish_cb -- called when listener is set up |kill_ch| { log(debug, fmt!("establish_cb %?", @@ -1574,7 +1575,8 @@ mod test { fn run_tcp_test_server_fail(server_ip: ~str, server_port: uint, iotask: IoTask) -> TcpListenErrData { let server_ip_addr = ip::v4::parse_addr(server_ip); - let listen_result = listen(server_ip_addr, server_port, 128u, iotask, + let listen_result = listen(move server_ip_addr, server_port, 128, + iotask, // on_establish_cb -- called when listener is set up |kill_ch| { log(debug, fmt!("establish_cb %?", @@ -1600,7 +1602,8 @@ mod test { let server_ip_addr = ip::v4::parse_addr(server_ip); log(debug, ~"CLIENT: starting.."); - let connect_result = connect(server_ip_addr, server_port, iotask); + let connect_result = connect(move server_ip_addr, server_port, + iotask); if result::is_err(connect_result) { log(debug, ~"CLIENT: failed to connect"); let err_data = result::get_err(connect_result); diff --git a/src/libstd/rope.rs b/src/libstd/rope.rs index d1dc6cb8d02..4e7eaeccf9d 100644 --- a/src/libstd/rope.rs +++ b/src/libstd/rope.rs @@ -814,11 +814,11 @@ mod node { offset += 1u; i += 1u; } - unsafe::forget(local_buf); + unsafe::forget(move local_buf); } } } - return unsafe::transmute(buf); + return unsafe::transmute(move buf); } /** diff --git a/src/libstd/sha1.rs b/src/libstd/sha1.rs index e9f937f4d75..f7cdfd60f50 100644 --- a/src/libstd/sha1.rs +++ b/src/libstd/sha1.rs @@ -253,7 +253,7 @@ fn sha1() -> Sha1 { mut computed: false, work_buf: @vec::to_mut(vec::from_elem(work_buf_len, 0u32)) }; - let sh <- st as Sha1; + let sh = (move st) as Sha1; sh.reset(); return sh; } diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index 6719b8ad6cd..9a176013474 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -108,7 +108,7 @@ impl &Sem { /* for 1000.times { task::yield(); } */ // Need to wait outside the exclusive. if waiter_nobe.is_some() { - let _ = pipes::recv_one(option::unwrap(waiter_nobe)); + let _ = pipes::recv_one(option::unwrap(move waiter_nobe)); } } fn release() { diff --git a/src/libstd/test.rs b/src/libstd/test.rs index 7c0e87ec144..b1f03f713d8 100644 --- a/src/libstd/test.rs +++ b/src/libstd/test.rs @@ -401,7 +401,7 @@ fn run_test(+test: TestDesc, monitor_ch: comm::Chan) { task::task().unlinked().future_result(|+r| { result_future = Some(move r); }).spawn(move testfn); - let task_result = future::get(&option::unwrap(result_future)); + let task_result = future::get(&option::unwrap(move result_future)); let test_result = calc_result(test, task_result == task::Success); comm::send(monitor_ch, (copy test, test_result)); }; diff --git a/src/libstd/uv_global_loop.rs b/src/libstd/uv_global_loop.rs index e5af0e8ffdf..34f5c28ba95 100644 --- a/src/libstd/uv_global_loop.rs +++ b/src/libstd/uv_global_loop.rs @@ -104,7 +104,7 @@ fn spawn_loop() -> IoTask { } } }; - spawn_iotask(builder) + spawn_iotask(move builder) } #[cfg(test)]