diff options
| author | bors <bors@rust-lang.org> | 2013-03-15 20:15:44 -0700 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2013-03-15 20:15:44 -0700 |
| commit | 6f1e8ef71abb390a8f6406292ea06c729dcbf9e5 (patch) | |
| tree | eacbc64a864bd47298bdf1f2e678f096b1ea02b6 /src/libcore | |
| parent | 5a77a1048897a12c9031d3e0b3867f0c6e3673ea (diff) | |
| parent | ee5842494a9170d6e1079a671695fcfc32ceb920 (diff) | |
| download | rust-6f1e8ef71abb390a8f6406292ea06c729dcbf9e5.tar.gz rust-6f1e8ef71abb390a8f6406292ea06c729dcbf9e5.zip | |
auto merge of #5404 : bstrie/rust/decopy, r=pcwalton
Also turn `copy` into `.clone()` in much of run-pass.
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/clone.rs | 5 | ||||
| -rw-r--r-- | src/libcore/str.rs | 8 | ||||
| -rw-r--r-- | src/libcore/unstable/global.rs | 6 | ||||
| -rw-r--r-- | src/libcore/vec.rs | 13 |
4 files changed, 29 insertions, 3 deletions
diff --git a/src/libcore/clone.rs b/src/libcore/clone.rs index 297c4438039..af44f68601b 100644 --- a/src/libcore/clone.rs +++ b/src/libcore/clone.rs @@ -20,6 +20,11 @@ impl Clone for () { fn clone(&self) -> () { () } } +impl<T:Clone> 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 430ed2d9e38..23b14e243b8 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}; @@ -2436,6 +2437,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 654bf18a5b6..d8ded635291 100644 --- a/src/libcore/unstable/global.rs +++ b/src/libcore/unstable/global.rs @@ -68,11 +68,11 @@ unsafe fn global_data_clone_create_<T:Owned + Clone>( 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<GlobalState> { // 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 360940236ca..f11a63a787d 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<A:Copy> iter::CopyableNonstrictIter<A> for @[A] { } } +impl<A:Clone> 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)] |
