Skip to content

Commit bef5396

Browse files
committed
core: implement Clone for primitive types
1 parent a5fae1d commit bef5396

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

src/libcore/clone.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,31 @@ impl Clone for () {
1919
#[inline(always)]
2020
fn clone(&self) -> () { () }
2121
}
22+
23+
macro_rules! clone_impl(
24+
($t:ty) => {
25+
impl Clone for $t {
26+
#[inline(always)]
27+
fn clone(&self) -> $t { *self }
28+
}
29+
}
30+
)
31+
32+
clone_impl!(int)
33+
clone_impl!(i8)
34+
clone_impl!(i16)
35+
clone_impl!(i32)
36+
clone_impl!(i64)
37+
38+
clone_impl!(uint)
39+
clone_impl!(u8)
40+
clone_impl!(u16)
41+
clone_impl!(u32)
42+
clone_impl!(u64)
43+
44+
clone_impl!(float)
45+
clone_impl!(f32)
46+
clone_impl!(f64)
47+
48+
clone_impl!(bool)
49+
clone_impl!(char)

src/test/run-pass/deriving-clone-struct.rs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,24 @@
11
#[deriving_clone]
22
struct S {
3-
foo: (),
4-
bar: ()
3+
_int: int,
4+
_i8: i8,
5+
_i16: i16,
6+
_i32: i32,
7+
_i64: i64,
8+
9+
_uint: uint,
10+
_u8: u8,
11+
_u16: u16,
12+
_u32: u32,
13+
_u64: u64,
14+
15+
_float: float,
16+
_f32: f32,
17+
_f64: f64,
18+
19+
_bool: bool,
20+
_char: char,
21+
_nil: ()
522
}
623

724
fn main() {}
8-

0 commit comments

Comments
 (0)