From 748c2c9ebc3859c77a1fa3ef808ddd04c77bab75 Mon Sep 17 00:00:00 2001 From: Ben Striegel Date: Fri, 15 Mar 2013 18:26:59 -0400 Subject: [PATCH 1/2] impl Clone for ~T, ~[T], ~str --- src/libcore/clone.rs | 5 +++++ src/libcore/str.rs | 8 ++++++++ src/libcore/unstable/global.rs | 6 +++--- src/libcore/vec.rs | 13 +++++++++++++ src/libstd/arc.rs | 20 ++++++++++---------- src/libstd/sync.rs | 22 +++++++++++----------- src/libsyntax/ext/pipes/liveness.rs | 2 +- 7 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src/libcore/clone.rs b/src/libcore/clone.rs index 297c4438039f0..af44f68601bc2 100644 --- a/src/libcore/clone.rs +++ b/src/libcore/clone.rs @@ -20,6 +20,11 @@ impl Clone for () { fn clone(&self) -> () { () } } +impl Clone for ~T { + #[inline(always)] + fn clone(&self) -> ~T { ~(**self).clone() } +} + macro_rules! clone_impl( ($t:ty) => { impl Clone for $t { diff --git a/src/libcore/str.rs b/src/libcore/str.rs index 4163679a98d74..67a3f0d5d722d 100644 --- a/src/libcore/str.rs +++ b/src/libcore/str.rs @@ -20,6 +20,7 @@ use at_vec; use cast; use char; +use clone::Clone; use cmp::{Equiv, TotalOrd, Ordering, Less, Equal, Greater}; use libc; use option::{None, Option, Some}; @@ -2433,6 +2434,13 @@ impl OwnedStr for ~str { } } +impl Clone for ~str { + #[inline(always)] + fn clone(&self) -> ~str { + self.to_str() // hilarious + } +} + #[cfg(test)] mod tests { use char; diff --git a/src/libcore/unstable/global.rs b/src/libcore/unstable/global.rs index 654bf18a5b6b9..d8ded635291dc 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -68,11 +68,11 @@ unsafe fn global_data_clone_create_( match value { None => { let value = create(); - clone_value = Some(value.clone()); + clone_value = Some((*value).clone()); Some(value) } Some(value) => { - clone_value = Some(value.clone()); + clone_value = Some((*value).clone()); Some(value) } } @@ -193,7 +193,7 @@ fn get_global_state() -> Exclusive { // Successfully installed the global pointer // Take a handle to return - let clone = state.clone(); + let clone = (*state).clone(); // Install a runtime exit function to destroy the global object do at_exit { diff --git a/src/libcore/vec.rs b/src/libcore/vec.rs index 360940236ca1f..f11a63a787d7c 100644 --- a/src/libcore/vec.rs +++ b/src/libcore/vec.rs @@ -15,6 +15,7 @@ use container::{Container, Mutable}; use cast; use cmp::{Eq, Equiv, Ord, TotalOrd, Ordering, Less, Equal, Greater}; +use clone::Clone; use iter::BaseIter; use iter; use kinds::Copy; @@ -2501,6 +2502,18 @@ impl iter::CopyableNonstrictIter for @[A] { } } +impl Clone for ~[A] { + #[inline] + fn clone(&self) -> ~[A] { + let mut dolly = ~[]; + vec::reserve(&mut dolly, self.len()); + for self.each |item| { + dolly.push(item.clone()); + } + return dolly; + } +} + // ___________________________________________________________________________ #[cfg(test)] diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index b91af9a006903..bd2f641c017f1 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -572,7 +572,7 @@ mod tests { #[test] #[should_fail] #[ignore(cfg(windows))] pub fn test_rw_arc_poison_wr() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.write |one| { fail_unless!(*one == 2); @@ -585,7 +585,7 @@ mod tests { #[test] #[should_fail] #[ignore(cfg(windows))] pub fn test_rw_arc_poison_ww() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.write |one| { fail_unless!(*one == 2); @@ -598,7 +598,7 @@ mod tests { #[test] #[should_fail] #[ignore(cfg(windows))] pub fn test_rw_arc_poison_dw() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.write_downgrade |write_mode| { do (&write_mode).write |one| { @@ -613,7 +613,7 @@ mod tests { #[test] #[ignore(cfg(windows))] pub fn test_rw_arc_no_poison_rr() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.read |one| { fail_unless!(*one == 2); @@ -626,7 +626,7 @@ mod tests { #[test] #[ignore(cfg(windows))] pub fn test_rw_arc_no_poison_rw() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.read |one| { fail_unless!(*one == 2); @@ -639,7 +639,7 @@ mod tests { #[test] #[ignore(cfg(windows))] pub fn test_rw_arc_no_poison_dr() { let arc = ~RWARC(1); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); do task::try || { do arc2.write_downgrade |write_mode| { let read_mode = arc2.downgrade(write_mode); @@ -655,7 +655,7 @@ mod tests { #[test] pub fn test_rw_arc() { let arc = ~RWARC(0); - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); let (p,c) = comm::stream(); do task::spawn || { @@ -673,7 +673,7 @@ mod tests { // Readers try to catch the writer in the act let mut children = ~[]; for 5.times { - let arc3 = ~arc.clone(); + let arc3 = (*arc).clone(); do task::task().future_result(|+r| children.push(r)).spawn || { do arc3.read |num| { @@ -704,7 +704,7 @@ mod tests { for 10.times { let ((rp1,rc1),(rp2,rc2)) = (comm::stream(),comm::stream()); reader_convos.push((rc1, rp2)); - let arcn = ~arc.clone(); + let arcn = (*arc).clone(); do task::spawn || { rp1.recv(); // wait for downgrader to give go-ahead do arcn.read |state| { @@ -715,7 +715,7 @@ mod tests { } // Writer task - let arc2 = ~arc.clone(); + let arc2 = (*arc).clone(); let ((wp1,wc1),(wp2,wc2)) = (comm::stream(),comm::stream()); do task::spawn || { wp1.recv(); diff --git a/src/libstd/sync.rs b/src/libstd/sync.rs index abd8bc742359c..1d1ec0e11f7fa 100644 --- a/src/libstd/sync.rs +++ b/src/libstd/sync.rs @@ -827,7 +827,7 @@ mod tests { // "load tmp = move ptr; inc tmp; store ptr <- tmp" dance. let (p,c) = comm::stream(); let m = ~Mutex(); - let m2 = ~m.clone(); + let m2 = m.clone(); let mut sharedstate = ~0; let ptr = ptr::addr_of(&(*sharedstate)); do task::spawn || { @@ -1105,13 +1105,13 @@ mod tests { // Test mutual exclusion between readers and writers. Just like the // mutex mutual exclusion test, a ways above. let (p,c) = comm::stream(); - let x2 = ~x.clone(); + let x2 = (*x).clone(); let mut sharedstate = ~0; let ptr = ptr::addr_of(&(*sharedstate)); do task::spawn || { let sharedstate: &mut int = unsafe { cast::reinterpret_cast(&ptr) }; - access_shared(sharedstate, x2, mode1, 10); + access_shared(sharedstate, &x2, mode1, 10); c.send(()); } access_shared(sharedstate, x, mode2, 10); @@ -1150,14 +1150,14 @@ mod tests { mode2: RWlockMode, make_mode2_go_first: bool) { // Much like sem_multi_resource. - let x2 = ~x.clone(); + let x2 = (*x).clone(); let (p1,c1) = comm::stream(); let (p2,c2) = comm::stream(); do task::spawn || { if !make_mode2_go_first { let _ = p2.recv(); // parent sends to us once it locks, or ... } - do lock_rwlock_in_mode(x2, mode2) { + do lock_rwlock_in_mode(&x2, mode2) { if make_mode2_go_first { c1.send(()); // ... we send to it once we lock } @@ -1207,7 +1207,7 @@ mod tests { // Child wakes up parent do x.write_cond |cond| { - let x2 = ~x.clone(); + let x2 = (*x).clone(); do task::spawn || { do x2.write_cond |cond| { let woken = cond.signal(); @@ -1218,7 +1218,7 @@ mod tests { } // Parent wakes up child let (port,chan) = comm::stream(); - let x3 = ~x.clone(); + let x3 = (*x).clone(); do task::spawn || { do x3.write_cond |cond| { chan.send(()); @@ -1253,11 +1253,11 @@ mod tests { let mut ports = ~[]; for num_waiters.times { - let xi = ~x.clone(); + let xi = (*x).clone(); let (port, chan) = comm::stream(); ports.push(port); do task::spawn || { - do lock_cond(xi, dg1) |cond| { + do lock_cond(&xi, dg1) |cond| { chan.send(()); cond.wait(); chan.send(()); @@ -1289,10 +1289,10 @@ mod tests { pub fn rwlock_kill_helper(mode1: RWlockMode, mode2: RWlockMode) { // Mutex must get automatically unlocked if failed/killed within. let x = ~RWlock(); - let x2 = ~x.clone(); + let x2 = (*x).clone(); let result: result::Result<(),()> = do task::try || { - do lock_rwlock_in_mode(x2, mode1) { + do lock_rwlock_in_mode(&x2, mode1) { fail!(); } }; diff --git a/src/libsyntax/ext/pipes/liveness.rs b/src/libsyntax/ext/pipes/liveness.rs index 97f2e516603be..15ba7f95538fa 100644 --- a/src/libsyntax/ext/pipes/liveness.rs +++ b/src/libsyntax/ext/pipes/liveness.rs @@ -63,7 +63,7 @@ pub fn analyze(proto: protocol, _cx: @ext_ctxt) { debug!("colive iteration %?", i); let mut new_colive = ~[]; for colive.eachi |i, this_colive| { - let mut result = ~this_colive.clone(); + let mut result = this_colive.clone(); let this = proto.get_state_by_id(i); for this_colive.ones |j| { let next = proto.get_state_by_id(j); From ee5842494a9170d6e1079a671695fcfc32ceb920 Mon Sep 17 00:00:00 2001 From: Ben Striegel Date: Fri, 15 Mar 2013 18:27:15 -0400 Subject: [PATCH 2/2] Clonify some of run-pass --- src/test/run-pass/alt-value-binding-in-guard-3291.rs | 2 +- src/test/run-pass/assignability-trait.rs | 2 +- src/test/run-pass/block-iter-2.rs | 4 ++-- src/test/run-pass/block-vec-map2.rs | 2 +- src/test/run-pass/borrowck-borrow-from-expr-block.rs | 2 +- .../run-pass/borrowck-preserve-box-sometimes-needed.rs | 2 +- src/test/run-pass/class-exports.rs | 2 +- src/test/run-pass/class-implement-traits.rs | 2 +- src/test/run-pass/class-separate-impl.rs | 9 ++++++--- src/test/run-pass/expr-alt-generic-unique1.rs | 4 ++-- src/test/run-pass/expr-alt-generic-unique2.rs | 4 ++-- src/test/run-pass/expr-block-generic-unique1.rs | 4 ++-- src/test/run-pass/generic-alias-unique.rs | 2 +- src/test/run-pass/hashmap-memory.rs | 6 +++--- src/test/run-pass/issue-2487-a.rs | 2 +- src/test/run-pass/issue-2633-2.rs | 2 +- src/test/run-pass/issue-3389.rs | 2 +- src/test/run-pass/issue-3609.rs | 2 +- src/test/run-pass/issue-4541.rs | 2 +- src/test/run-pass/issue-4542.rs | 2 +- src/test/run-pass/istr.rs | 4 ++-- src/test/run-pass/last-use-in-cap-clause.rs | 2 +- src/test/run-pass/last-use-is-capture.rs | 4 ++-- src/test/run-pass/monad.rs | 4 ++-- .../run-pass/propagate-expected-type-through-block.rs | 2 +- src/test/run-pass/rec-auto.rs | 4 ++-- src/test/run-pass/reflect-visit-data.rs | 4 ++-- src/test/run-pass/reflect-visit-type.rs | 2 +- src/test/run-pass/ret-break-cont-in-block.rs | 8 ++++---- src/test/run-pass/stat.rs | 2 +- src/test/run-pass/str-append.rs | 6 +++--- src/test/run-pass/str-concat.rs | 2 +- src/test/run-pass/syntax-extension-fmt.rs | 4 ++-- src/test/run-pass/trait-generic.rs | 2 +- src/test/run-pass/unique-assign-copy.rs | 2 +- src/test/run-pass/unique-decl-init-copy.rs | 2 +- src/test/run-pass/unique-in-vec-copy.rs | 2 +- src/test/run-pass/vec-ivec-deadlock.rs | 2 +- src/test/run-pass/vec-matching-fold.rs | 8 ++++---- 39 files changed, 64 insertions(+), 61 deletions(-) diff --git a/src/test/run-pass/alt-value-binding-in-guard-3291.rs b/src/test/run-pass/alt-value-binding-in-guard-3291.rs index 5171d7d2a58a6..33785b2fbb096 100644 --- a/src/test/run-pass/alt-value-binding-in-guard-3291.rs +++ b/src/test/run-pass/alt-value-binding-in-guard-3291.rs @@ -11,7 +11,7 @@ fn foo(x: Option<~int>, b: bool) -> int { match x { None => { 1 } - Some(copy x) if b => { *x } + Some(ref x) if b => { *x.clone() } Some(_) => { 0 } } } diff --git a/src/test/run-pass/assignability-trait.rs b/src/test/run-pass/assignability-trait.rs index 5d3ad4b3b2bb6..16cd51c8f275d 100644 --- a/src/test/run-pass/assignability-trait.rs +++ b/src/test/run-pass/assignability-trait.rs @@ -43,7 +43,7 @@ pub fn main() { // Call a method for x.iterate() |y| { fail_unless!(x[*y] == *y); } // Call a parameterized function - fail_unless!(length(copy x) == vec::len(x)); + fail_unless!(length(x.clone()) == vec::len(x)); // Call a parameterized function, with type arguments that require // a borrow fail_unless!(length::(x) == vec::len(x)); diff --git a/src/test/run-pass/block-iter-2.rs b/src/test/run-pass/block-iter-2.rs index 9e9eef6499289..96336f5569c19 100644 --- a/src/test/run-pass/block-iter-2.rs +++ b/src/test/run-pass/block-iter-2.rs @@ -15,8 +15,8 @@ fn iter_vec(v: ~[T], f: &fn(&T)) { for v.each |x| { f(x); } } pub fn main() { let v = ~[1, 2, 3, 4, 5]; let mut sum = 0; - iter_vec(copy v, |i| { - iter_vec(copy v, |j| { + iter_vec(v.clone(), |i| { + iter_vec(v.clone(), |j| { sum += *i * *j; }); }); diff --git a/src/test/run-pass/block-vec-map2.rs b/src/test/run-pass/block-vec-map2.rs index 58e09409fc545..28875da25a643 100644 --- a/src/test/run-pass/block-vec-map2.rs +++ b/src/test/run-pass/block-vec-map2.rs @@ -15,6 +15,6 @@ pub fn main() { vec::map2(~[1, 2, 3, 4, 5], ~[true, false, false, true, true], |i, b| if *b { -(*i) } else { *i } ); - error!(copy v); + error!(v.clone()); fail_unless!((v == ~[-1, 2, 3, -4, -5])); } diff --git a/src/test/run-pass/borrowck-borrow-from-expr-block.rs b/src/test/run-pass/borrowck-borrow-from-expr-block.rs index 0422be9d333df..f2e0b6c9ca0f4 100644 --- a/src/test/run-pass/borrowck-borrow-from-expr-block.rs +++ b/src/test/run-pass/borrowck-borrow-from-expr-block.rs @@ -13,7 +13,7 @@ fn borrow(x: &int, f: &fn(x: &int)) { } fn test1(x: @~int) { - do borrow(copy *x) |p| { + do borrow(&*x.clone()) |p| { let x_a = ptr::addr_of(&(**x)); fail_unless!((x_a as uint) != ptr::to_uint(p)); fail_unless!(unsafe{*x_a} == *p); diff --git a/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs b/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs index a0f1801ce29a9..e3f8f98f4b6b1 100644 --- a/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs +++ b/src/test/run-pass/borrowck-preserve-box-sometimes-needed.rs @@ -13,7 +13,7 @@ fn switcher(x: Option<@int>) { let mut x = x; match x { - Some(@y) => { copy y; x = None; } + Some(@y) => { y.clone(); x = None; } None => { } } } diff --git a/src/test/run-pass/class-exports.rs b/src/test/run-pass/class-exports.rs index afd21bdca1af0..6a665f770ffdd 100644 --- a/src/test/run-pass/class-exports.rs +++ b/src/test/run-pass/class-exports.rs @@ -22,7 +22,7 @@ mod kitty { } pub impl cat { - fn get_name(&self) -> ~str { copy self.name } + fn get_name(&self) -> ~str { self.name.clone() } } pub fn cat(in_name: ~str) -> cat { diff --git a/src/test/run-pass/class-implement-traits.rs b/src/test/run-pass/class-implement-traits.rs index 9e6637c9b170a..7cd2753ee1548 100644 --- a/src/test/run-pass/class-implement-traits.rs +++ b/src/test/run-pass/class-implement-traits.rs @@ -53,7 +53,7 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat { cat { meows: in_x, how_hungry: in_y, - name: copy in_name + name: in_name.clone() } } diff --git a/src/test/run-pass/class-separate-impl.rs b/src/test/run-pass/class-separate-impl.rs index 7cba1456ee74d..bb07597a1887c 100644 --- a/src/test/run-pass/class-separate-impl.rs +++ b/src/test/run-pass/class-separate-impl.rs @@ -9,8 +9,6 @@ // except according to those terms. // xfail-fast -use core::to_str::*; - struct cat { priv meows : uint, @@ -53,7 +51,12 @@ fn cat(in_x : uint, in_y : int, in_name: ~str) -> cat { } impl ToStr for cat { - pure fn to_str(&self) -> ~str { copy self.name } + pure fn to_str(&self) -> ~str { + // FIXME #5384: this unsafe block is to work around purity + unsafe { + self.name.clone() + } + } } fn print_out(thing: @ToStr, expected: ~str) { diff --git a/src/test/run-pass/expr-alt-generic-unique1.rs b/src/test/run-pass/expr-alt-generic-unique1.rs index b24ac9de00956..74a88bb5c8769 100644 --- a/src/test/run-pass/expr-alt-generic-unique1.rs +++ b/src/test/run-pass/expr-alt-generic-unique1.rs @@ -13,9 +13,9 @@ // -*- rust -*- type compare = @fn(~T, ~T) -> bool; -fn test_generic(expected: ~T, eq: compare) { +fn test_generic(expected: ~T, eq: compare) { let actual: ~T = match true { - true => { copy expected }, + true => { expected.clone() }, _ => fail!(~"wat") }; fail_unless!((eq(expected, actual))); diff --git a/src/test/run-pass/expr-alt-generic-unique2.rs b/src/test/run-pass/expr-alt-generic-unique2.rs index 7bbd0bfc380cd..c9efe753f5757 100644 --- a/src/test/run-pass/expr-alt-generic-unique2.rs +++ b/src/test/run-pass/expr-alt-generic-unique2.rs @@ -13,9 +13,9 @@ type compare = @fn(T, T) -> bool; -fn test_generic(expected: T, eq: compare) { +fn test_generic(expected: T, eq: compare) { let actual: T = match true { - true => copy expected, + true => expected.clone(), _ => fail!(~"wat") }; fail_unless!((eq(expected, actual))); diff --git a/src/test/run-pass/expr-block-generic-unique1.rs b/src/test/run-pass/expr-block-generic-unique1.rs index b186d99a6dfe4..a9fe128661dc7 100644 --- a/src/test/run-pass/expr-block-generic-unique1.rs +++ b/src/test/run-pass/expr-block-generic-unique1.rs @@ -13,8 +13,8 @@ // -*- rust -*- type compare = @fn(~T, ~T) -> bool; -fn test_generic(expected: ~T, eq: compare) { - let actual: ~T = { copy expected }; +fn test_generic(expected: ~T, eq: compare) { + let actual: ~T = { expected.clone() }; fail_unless!((eq(expected, actual))); } diff --git a/src/test/run-pass/generic-alias-unique.rs b/src/test/run-pass/generic-alias-unique.rs index 7e0b32d8e8f65..287fc260bf86f 100644 --- a/src/test/run-pass/generic-alias-unique.rs +++ b/src/test/run-pass/generic-alias-unique.rs @@ -14,7 +14,7 @@ fn id(t: T) -> T { return t; } pub fn main() { let expected = ~100; - let actual = id::<~int>(copy expected); + let actual = id::<~int>(expected.clone()); debug!(*actual); fail_unless!((*expected == *actual)); } diff --git a/src/test/run-pass/hashmap-memory.rs b/src/test/run-pass/hashmap-memory.rs index 9254641212073..5d8ac2f1ab5fa 100644 --- a/src/test/run-pass/hashmap-memory.rs +++ b/src/test/run-pass/hashmap-memory.rs @@ -38,8 +38,8 @@ mod map_reduce { fn start_mappers(ctrl: SharedChan, inputs: ~[~str]) { for inputs.each |i| { let ctrl = ctrl.clone(); - let i = copy *i; - task::spawn(|| map_task(ctrl.clone(), copy i) ); + let i = i.clone(); + task::spawn(|| map_task(ctrl.clone(), i.clone()) ); } } @@ -79,7 +79,7 @@ mod map_reduce { reducers = oldmap::HashMap(); - start_mappers(ctrl_chan, copy inputs); + start_mappers(ctrl_chan, inputs.clone()); let mut num_mappers = vec::len(inputs) as int; diff --git a/src/test/run-pass/issue-2487-a.rs b/src/test/run-pass/issue-2487-a.rs index 599866380883f..388160e538acd 100644 --- a/src/test/run-pass/issue-2487-a.rs +++ b/src/test/run-pass/issue-2487-a.rs @@ -20,7 +20,7 @@ impl Drop for socket { pub impl socket { fn set_identity(&self) { do closure { - setsockopt_bytes(copy self.sock) + setsockopt_bytes(self.sock.clone()) } } } diff --git a/src/test/run-pass/issue-2633-2.rs b/src/test/run-pass/issue-2633-2.rs index 5c3a2f0a4f60a..2c3b4b71bb8e3 100644 --- a/src/test/run-pass/issue-2633-2.rs +++ b/src/test/run-pass/issue-2633-2.rs @@ -14,5 +14,5 @@ fn a_val(&&x: ~int, +y: ~int) -> int { pub fn main() { let z = ~22; - a_val(copy z, copy z); + a_val(z.clone(), z.clone()); } diff --git a/src/test/run-pass/issue-3389.rs b/src/test/run-pass/issue-3389.rs index 5555867073491..6203f14f10f2e 100644 --- a/src/test/run-pass/issue-3389.rs +++ b/src/test/run-pass/issue-3389.rs @@ -27,6 +27,6 @@ pub fn main() { let v = ~[~"123", ~"abc"]; node.content = ~[~"123", ~"abc"]; print_str_vector(v); - print_str_vector(copy node.content); + print_str_vector(node.content.clone()); } diff --git a/src/test/run-pass/issue-3609.rs b/src/test/run-pass/issue-3609.rs index d0afd0107ee3e..fc6ceb4130fcd 100644 --- a/src/test/run-pass/issue-3609.rs +++ b/src/test/run-pass/issue-3609.rs @@ -19,7 +19,7 @@ fn foo(name: ~str, samples_chan: Chan) { for uint::range(0, buffer.len()) |i| {error!("%?: %f", i, buffer[i])} }; - samples_chan.send(GetSamples(copy name, callback)); + samples_chan.send(GetSamples(name.clone(), callback)); }; } diff --git a/src/test/run-pass/issue-4541.rs b/src/test/run-pass/issue-4541.rs index fdc2cc1b01325..37e91cf1eb22a 100644 --- a/src/test/run-pass/issue-4541.rs +++ b/src/test/run-pass/issue-4541.rs @@ -14,7 +14,7 @@ fn parse_args() -> ~str { let mut n = 0; while n < args.len() { - match copy args[n] { + match args[n].clone() { ~"-v" => (), s => { return s; diff --git a/src/test/run-pass/issue-4542.rs b/src/test/run-pass/issue-4542.rs index f708b099c3796..a5e5b10d07642 100644 --- a/src/test/run-pass/issue-4542.rs +++ b/src/test/run-pass/issue-4542.rs @@ -11,7 +11,7 @@ // xfail-test pub fn main() { for os::args().each |arg| { - match copy *arg { + match arg.clone() { s => { } } } diff --git a/src/test/run-pass/istr.rs b/src/test/run-pass/istr.rs index 35c46609f8fd3..e6e3931162695 100644 --- a/src/test/run-pass/istr.rs +++ b/src/test/run-pass/istr.rs @@ -10,7 +10,7 @@ fn test_stack_assign() { let s: ~str = ~"a"; - debug!(copy s); + debug!(s.clone()); let t: ~str = ~"a"; fail_unless!((s == t)); let u: ~str = ~"b"; @@ -49,7 +49,7 @@ fn test_append() { let mut s = ~"a"; s += ~"b"; - debug!(copy s); + debug!(s.clone()); fail_unless!((s == ~"ab")); let mut s = ~"c"; diff --git a/src/test/run-pass/last-use-in-cap-clause.rs b/src/test/run-pass/last-use-in-cap-clause.rs index 40075e12f4b5c..3d121d087453c 100644 --- a/src/test/run-pass/last-use-in-cap-clause.rs +++ b/src/test/run-pass/last-use-in-cap-clause.rs @@ -14,7 +14,7 @@ struct A { a: ~int } fn foo() -> @fn() -> int { let k = ~22; - let _u = A {a: copy k}; + let _u = A {a: k.clone()}; let result: @fn() -> int = || 22; result } diff --git a/src/test/run-pass/last-use-is-capture.rs b/src/test/run-pass/last-use-is-capture.rs index e05d483f48640..2c62b6894d0df 100644 --- a/src/test/run-pass/last-use-is-capture.rs +++ b/src/test/run-pass/last-use-is-capture.rs @@ -15,6 +15,6 @@ struct A { a: ~int } pub fn main() { fn invoke(f: @fn()) { f(); } let k = ~22; - let _u = A {a: copy k}; - invoke(|| error!(copy k) ) + let _u = A {a: k.clone()}; + invoke(|| error!(k.clone()) ) } diff --git a/src/test/run-pass/monad.rs b/src/test/run-pass/monad.rs index 5f3afee693f72..f046adc30b456 100644 --- a/src/test/run-pass/monad.rs +++ b/src/test/run-pass/monad.rs @@ -43,7 +43,7 @@ pub fn main() { fail_unless!(transform(Some(10)) == Some(~"11")); fail_unless!(transform(None) == None); fail_unless!((~[~"hi"]) - .bind(|x| ~[copy *x, *x + ~"!"] ) - .bind(|x| ~[copy *x, *x + ~"?"] ) == + .bind(|x| ~[x.clone(), *x + ~"!"] ) + .bind(|x| ~[x.clone(), *x + ~"?"] ) == ~[~"hi", ~"hi?", ~"hi!", ~"hi!?"]); } diff --git a/src/test/run-pass/propagate-expected-type-through-block.rs b/src/test/run-pass/propagate-expected-type-through-block.rs index 20a6d1307747f..c68771e4a949c 100644 --- a/src/test/run-pass/propagate-expected-type-through-block.rs +++ b/src/test/run-pass/propagate-expected-type-through-block.rs @@ -5,7 +5,7 @@ pub fn main() { let y = ~3; let foo: @fn(&int) -> int = { - let y = copy y; + let y = y.clone(); |x| *x + *y }; fail_unless!(foo(@22) == 25); diff --git a/src/test/run-pass/rec-auto.rs b/src/test/run-pass/rec-auto.rs index fbbec638dd4dc..62cb3296f60bb 100644 --- a/src/test/run-pass/rec-auto.rs +++ b/src/test/run-pass/rec-auto.rs @@ -19,6 +19,6 @@ struct X { foo: ~str, bar: ~str } pub fn main() { let x = X {foo: ~"hello", bar: ~"world"}; - debug!(copy x.foo); - debug!(copy x.bar); + debug!(x.foo.clone()); + debug!(x.bar.clone()); } diff --git a/src/test/run-pass/reflect-visit-data.rs b/src/test/run-pass/reflect-visit-data.rs index 78e1dd31e1aaf..9f093812d8a7c 100644 --- a/src/test/run-pass/reflect-visit-data.rs +++ b/src/test/run-pass/reflect-visit-data.rs @@ -647,10 +647,10 @@ pub fn main() { let v = @v as @TyVisitor; visit_tydesc(td, v); - for (copy u.vals).each |s| { + for (u.vals.clone()).each |s| { io::println(fmt!("val: %s", *s)); } - error!("%?", copy u.vals); + error!("%?", u.vals.clone()); fail_unless!(u.vals == ~[ ~"1", ~"2", ~"3", ~"true", ~"false", ~"5", ~"4", ~"3", ~"12" ]); diff --git a/src/test/run-pass/reflect-visit-type.rs b/src/test/run-pass/reflect-visit-type.rs index bc67ece79de50..6576a6c3fa975 100644 --- a/src/test/run-pass/reflect-visit-type.rs +++ b/src/test/run-pass/reflect-visit-type.rs @@ -150,7 +150,7 @@ pub fn main() { visit_ty::(vv); visit_ty::<~[int]>(vv); - for (copy v.types).each {|s| + for (v.types.clone()).each {|s| io::println(fmt!("type: %s", s)); } fail_unless!(v.types == ["bool", "int", "i8", "i16", diff --git a/src/test/run-pass/ret-break-cont-in-block.rs b/src/test/run-pass/ret-break-cont-in-block.rs index 6fe7575884249..6fe5831644fdc 100644 --- a/src/test/run-pass/ret-break-cont-in-block.rs +++ b/src/test/run-pass/ret-break-cont-in-block.rs @@ -20,9 +20,9 @@ fn iter(v: ~[T], it: &fn(&T) -> bool) { } } -fn find_pos(n: T, h: ~[T]) -> Option { +fn find_pos(n: T, h: ~[T]) -> Option { let mut i = 0u; - for iter(copy h) |e| { + for iter(h.clone()) |e| { if *e == n { return Some(i); } i += 1u; } @@ -31,8 +31,8 @@ fn find_pos(n: T, h: ~[T]) -> Option { fn bail_deep(x: ~[~[bool]]) { let mut seen = false; - for iter(copy x) |x| { - for iter(copy *x) |x| { + for iter(x.clone()) |x| { + for iter(x.clone()) |x| { fail_unless!(!seen); if *x { seen = true; return; } } diff --git a/src/test/run-pass/stat.rs b/src/test/run-pass/stat.rs index 1613eec7405a3..f2e12294b0988 100644 --- a/src/test/run-pass/stat.rs +++ b/src/test/run-pass/stat.rs @@ -20,7 +20,7 @@ pub fn main() { { match io::file_writer(&path, [io::Create, io::Truncate]) { - Err(copy e) => fail!(e), + Err(ref e) => fail!(e.clone()), Ok(f) => { for uint::range(0, 1000) |_i| { f.write_u8(0); diff --git a/src/test/run-pass/str-append.rs b/src/test/run-pass/str-append.rs index 230af83d1e156..d1592c46dc993 100644 --- a/src/test/run-pass/str-append.rs +++ b/src/test/run-pass/str-append.rs @@ -16,7 +16,7 @@ extern mod std; fn test1() { let mut s: ~str = ~"hello"; s += ~"world"; - debug!(copy s); + debug!(s.clone()); fail_unless!((s[9] == 'd' as u8)); } @@ -26,8 +26,8 @@ fn test2() { let ff: ~str = ~"abc"; let a: ~str = ff + ~"ABC" + ff; let b: ~str = ~"ABC" + ff + ~"ABC"; - debug!(copy a); - debug!(copy b); + debug!(a.clone()); + debug!(b.clone()); fail_unless!((a == ~"abcABCabc")); fail_unless!((b == ~"ABCabcABC")); } diff --git a/src/test/run-pass/str-concat.rs b/src/test/run-pass/str-concat.rs index a91f5034f6be6..107998d3def2f 100644 --- a/src/test/run-pass/str-concat.rs +++ b/src/test/run-pass/str-concat.rs @@ -16,6 +16,6 @@ pub fn main() { let a: ~str = ~"hello"; let b: ~str = ~"world"; let s: ~str = a + b; - debug!(copy s); + debug!(s.clone()); fail_unless!((s[9] == 'd' as u8)); } diff --git a/src/test/run-pass/syntax-extension-fmt.rs b/src/test/run-pass/syntax-extension-fmt.rs index 1336009eca876..3af58274bfb3c 100644 --- a/src/test/run-pass/syntax-extension-fmt.rs +++ b/src/test/run-pass/syntax-extension-fmt.rs @@ -11,8 +11,8 @@ extern mod std; fn test(actual: ~str, expected: ~str) { - debug!(copy actual); - debug!(copy expected); + debug!(actual.clone()); + debug!(expected.clone()); fail_unless!((actual == expected)); } diff --git a/src/test/run-pass/trait-generic.rs b/src/test/run-pass/trait-generic.rs index 72fcb1970c692..c11ece6281347 100644 --- a/src/test/run-pass/trait-generic.rs +++ b/src/test/run-pass/trait-generic.rs @@ -17,7 +17,7 @@ impl to_str for int { fn to_str(&self) -> ~str { int::to_str(*self) } } impl to_str for ~str { - fn to_str(&self) -> ~str { copy *self } + fn to_str(&self) -> ~str { self.clone() } } impl to_str for () { fn to_str(&self) -> ~str { ~"()" } diff --git a/src/test/run-pass/unique-assign-copy.rs b/src/test/run-pass/unique-assign-copy.rs index 340a247c241d7..8ecff0719a29c 100644 --- a/src/test/run-pass/unique-assign-copy.rs +++ b/src/test/run-pass/unique-assign-copy.rs @@ -12,7 +12,7 @@ pub fn main() { let mut i = ~1; // Should be a copy let mut j; - j = copy i; + j = i.clone(); *i = 2; *j = 3; fail_unless!(*i == 2); diff --git a/src/test/run-pass/unique-decl-init-copy.rs b/src/test/run-pass/unique-decl-init-copy.rs index 2d15f09021e65..177b3ed5c246c 100644 --- a/src/test/run-pass/unique-decl-init-copy.rs +++ b/src/test/run-pass/unique-decl-init-copy.rs @@ -11,7 +11,7 @@ pub fn main() { let mut i = ~1; // Should be a copy - let mut j = copy i; + let mut j = i.clone(); *i = 2; *j = 3; fail_unless!(*i == 2); diff --git a/src/test/run-pass/unique-in-vec-copy.rs b/src/test/run-pass/unique-in-vec-copy.rs index 95b95913e98de..1033fa1c22c79 100644 --- a/src/test/run-pass/unique-in-vec-copy.rs +++ b/src/test/run-pass/unique-in-vec-copy.rs @@ -10,7 +10,7 @@ pub fn main() { let mut a = ~[~10]; - let b = copy a; + let b = a.clone(); fail_unless!(*a[0] == 10); fail_unless!(*b[0] == 10); diff --git a/src/test/run-pass/vec-ivec-deadlock.rs b/src/test/run-pass/vec-ivec-deadlock.rs index 505b57ec7bb57..8b6e037e84013 100644 --- a/src/test/run-pass/vec-ivec-deadlock.rs +++ b/src/test/run-pass/vec-ivec-deadlock.rs @@ -10,6 +10,6 @@ pub fn main() { let a = ~[1, 2, 3, 4, 5]; - let mut b = ~[copy a, copy a]; + let mut b = ~[a.clone(), a.clone()]; b = b + b; // FIXME(#3387)---can't write b += b } diff --git a/src/test/run-pass/vec-matching-fold.rs b/src/test/run-pass/vec-matching-fold.rs index 1df90bf681cfb..dfd4f025c139f 100644 --- a/src/test/run-pass/vec-matching-fold.rs +++ b/src/test/run-pass/vec-matching-fold.rs @@ -1,4 +1,4 @@ -fn foldl( +fn foldl( values: &[T], initial: U, function: &fn(partial: U, element: &T) -> U @@ -6,11 +6,11 @@ fn foldl( match values { [head, ..tail] => foldl(tail, function(initial, &head), function), - [] => copy initial + [] => initial.clone() } } -fn foldr( +fn foldr( values: &[T], initial: U, function: &fn(element: &T, partial: U) -> U @@ -18,7 +18,7 @@ fn foldr( match values { [..head, tail] => foldr(head, function(&tail, initial), function), - [] => copy initial + [] => initial.clone() } }