File tree Expand file tree Collapse file tree 2 files changed +34
-3
lines changed Expand file tree Collapse file tree 2 files changed +34
-3
lines changed Original file line number Diff line number Diff line change 1- // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
1+ // Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
22// file at the top-level directory of this distribution and at
33// http://rust-lang.org/COPYRIGHT.
44//
@@ -36,6 +36,16 @@ impl<T:Clone> Clone for ~T {
3636 fn clone ( & self ) -> ~T { ~( * * self ) . clone ( ) }
3737}
3838
39+ impl < T : Clone > Clone for @T {
40+ #[ inline( always) ]
41+ fn clone ( & self ) -> @T { @( * * self ) . clone ( ) }
42+ }
43+
44+ impl < T : Clone > Clone for @mut T {
45+ #[ inline( always) ]
46+ fn clone ( & self ) -> @mut T { @mut ( * * self ) . clone ( ) }
47+ }
48+
3949macro_rules! clone_impl(
4050 ( $t: ty) => {
4151 impl Clone for $t {
@@ -63,3 +73,24 @@ clone_impl!(f64)
6373
6474clone_impl ! ( bool )
6575clone_impl ! ( char )
76+
77+ #[ test]
78+ fn test_owned_clone ( ) {
79+ let a : ~int = ~5 i;
80+ let b : ~int = a. clone ( ) ;
81+ assert ! ( a == b) ;
82+ }
83+
84+ #[ test]
85+ fn test_managed_clone ( ) {
86+ let a : @int = @5 i;
87+ let b : @int = a. clone ( ) ;
88+ assert ! ( a == b) ;
89+ }
90+
91+ #[ test]
92+ fn test_managed_mut_clone ( ) {
93+ let a : @int = @5 i;
94+ let b : @int = a. clone ( ) ;
95+ assert ! ( a == b) ;
96+ }
Original file line number Diff line number Diff line change 1- // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
1+ // Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
22// file at the top-level directory of this distribution and at
33// http://rust-lang.org/COPYRIGHT.
44//
@@ -13,7 +13,7 @@ fn borrow(x: &int, f: &fn(x: &int)) {
1313}
1414
1515fn test1 ( x : @~int ) {
16- do borrow ( & * x. clone ( ) ) |p| {
16+ do borrow ( & * * x. clone ( ) ) |p| {
1717 let x_a = ptr:: addr_of ( & ( * * x) ) ;
1818 assert ! ( ( x_a as uint) != ptr:: to_uint( p) ) ;
1919 assert ! ( unsafe { * x_a} == * p) ;
You can’t perform that action at this time.
0 commit comments