From adbd5d7a421e50b1ff4c1d8f1f43a9fd5fb977a3 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 23 Jun 2014 16:34:29 -0700 Subject: [PATCH] core: Add stability attributes to Clone The following are tagged 'unstable' - core::clone - Clone - Clone::clone - impl Clone for Arc - impl Clone for arc::Weak - impl Clone for Rc - impl Clone for rc::Weak - impl Clone for Vec - impl Clone for Cell - impl Clone for RefCell - impl Clone for small tuples The following are tagged 'experimental' - Clone::clone_from - may not provide enough utility - impls for various extern "Rust" fns - may not handle lifetimes correctly See https://github.com/rust-lang/rust/wiki/Meeting-API-review-2014-06-23#clone --- src/liballoc/arc.rs | 2 ++ src/liballoc/owned.rs | 1 + src/liballoc/rc.rs | 2 ++ src/libcollections/vec.rs | 1 + src/libcore/cell.rs | 2 ++ src/libcore/clone.rs | 4 ++++ src/libcore/tuple.rs | 1 + src/libstd/gc.rs | 1 + 8 files changed, 14 insertions(+) diff --git a/src/liballoc/arc.rs b/src/liballoc/arc.rs index cccd5cb63ef..6af4083edb2 100644 --- a/src/liballoc/arc.rs +++ b/src/liballoc/arc.rs @@ -110,6 +110,7 @@ impl Arc { } } +#[unstable] impl Clone for Arc { /// Duplicate an atomically reference counted wrapper. /// @@ -236,6 +237,7 @@ impl Weak { } } +#[unstable] impl Clone for Weak { #[inline] fn clone(&self) -> Weak { diff --git a/src/liballoc/owned.rs b/src/liballoc/owned.rs index fa7a8df5035..6f5d3293556 100644 --- a/src/liballoc/owned.rs +++ b/src/liballoc/owned.rs @@ -42,6 +42,7 @@ impl Default for Box { fn default() -> Box { box Default::default() } } +#[unstable] impl Clone for Box { /// Return a copy of the owned box. #[inline] diff --git a/src/liballoc/rc.rs b/src/liballoc/rc.rs index c6e81fa7f7c..a3ca72f1547 100644 --- a/src/liballoc/rc.rs +++ b/src/liballoc/rc.rs @@ -143,6 +143,7 @@ impl Drop for Rc { } } +#[unstable] impl Clone for Rc { #[inline] fn clone(&self) -> Rc { @@ -224,6 +225,7 @@ impl Drop for Weak { } } +#[unstable] impl Clone for Weak { #[inline] fn clone(&self) -> Weak { diff --git a/src/libcollections/vec.rs b/src/libcollections/vec.rs index e3ed3ffbabf..0ee0c5b87ae 100644 --- a/src/libcollections/vec.rs +++ b/src/libcollections/vec.rs @@ -316,6 +316,7 @@ impl Vec { } } +#[unstable] impl Clone for Vec { fn clone(&self) -> Vec { let len = self.len; diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index fd694c04f55..ab701b76026 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -192,6 +192,7 @@ impl Cell { } } +#[unstable] impl Clone for Cell { fn clone(&self) -> Cell { Cell::new(self.get()) @@ -298,6 +299,7 @@ impl RefCell { } } +#[unstable] impl Clone for RefCell { fn clone(&self) -> RefCell { RefCell::new(self.borrow().clone()) diff --git a/src/libcore/clone.rs b/src/libcore/clone.rs index 4fb887bad94..04f01db3147 100644 --- a/src/libcore/clone.rs +++ b/src/libcore/clone.rs @@ -21,6 +21,8 @@ the `clone` method. */ +#![unstable] + /// A common trait for cloning an object. pub trait Clone { /// Returns a copy of the value. The contents of owned pointers @@ -34,6 +36,7 @@ pub trait Clone { /// but can be overridden to reuse the resources of `a` to avoid unnecessary /// allocations. #[inline(always)] + #[experimental = "this function is mostly unused"] fn clone_from(&mut self, source: &Self) { *self = source.clone() } @@ -88,6 +91,7 @@ clone_impl!(char) macro_rules! extern_fn_clone( ($($A:ident),*) => ( + #[experimental = "this may not be sufficient for fns with region parameters"] impl<$($A,)* ReturnType> Clone for extern "Rust" fn($($A),*) -> ReturnType { /// Return a copy of a function pointer #[inline] diff --git a/src/libcore/tuple.rs b/src/libcore/tuple.rs index 18511474ecf..3508da5d516 100644 --- a/src/libcore/tuple.rs +++ b/src/libcore/tuple.rs @@ -104,6 +104,7 @@ macro_rules! tuple_impls { )+ } + #[unstable] impl<$($T:Clone),+> Clone for ($($T,)+) { fn clone(&self) -> ($($T,)+) { ($(self.$refN().clone(),)+) diff --git a/src/libstd/gc.rs b/src/libstd/gc.rs index e889752f4fc..0f30e7231b1 100644 --- a/src/libstd/gc.rs +++ b/src/libstd/gc.rs @@ -37,6 +37,7 @@ pub struct Gc { marker: marker::NoSend, } +#[unstable] impl Clone for Gc { /// Clone the pointer only #[inline]