1
Fork 0

Implement Clone for arrays without using slice patterns

This commit is contained in:
Tobias Bucher 2015-12-01 19:53:08 +00:00
parent 19b9ad7444
commit 7867de02e3
2 changed files with 9 additions and 10 deletions

View file

@ -205,15 +205,15 @@ macro_rules! array_impl_default {
array_impl_default!{32, T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T T}
macro_rules! array_impl_clone {
{$n:expr, $t:ident $($ts:ident)*} => {
{$n:expr, $i:expr, $($idx:expr,)*} => {
#[stable(feature = "rust1", since = "1.0.0")]
impl<T: Clone> Clone for [T; $n] {
fn clone(&self) -> [T; $n] {
let &[ref $t, $(ref $ts),*] = self;
[$t.clone(), $($ts.clone()),*]
let temp = [&self[$i], $(&self[$idx]),*];
[temp[$i].clone(), $(temp[$idx].clone()),*]
}
}
array_impl_clone!{($n - 1), $($ts)*}
array_impl_clone!{$i, $($idx,)*}
};
{$n:expr,} => {
#[stable(feature = "rust1", since = "1.0.0")]
@ -225,9 +225,9 @@ macro_rules! array_impl_clone {
};
}
array_impl_clone! { 32,
t00 t01 t02 t03 t04 t05 t06 t07 t08 t09
t10 t11 t12 t13 t14 t15 t16 t17 t18 t19
t20 t21 t22 t23 t24 t25 t26 t27 t28 t29
t30 t31
array_impl_clone! {
32, 31, 30,
29, 28, 27, 26, 25, 24, 23, 22, 21, 20,
19, 18, 17, 16, 15, 14, 13, 12, 11, 10,
9, 8, 7, 6, 5, 4, 3, 2, 1, 0,
}

View file

@ -85,7 +85,6 @@
#![feature(unwind_attributes)]
#![cfg_attr(stage0, feature(simd))]
#![cfg_attr(not(stage0), feature(repr_simd, platform_intrinsics))]
#![feature(slice_patterns)]
#![feature(staged_api)]
#![feature(unboxed_closures)]