about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-08-15 04:19:14 +0000
committerbors <bors@rust-lang.org>2015-08-15 04:19:14 +0000
commit1e1b7f30228782ebf6168a5e20e63cdd7b9763ff (patch)
tree11c7958f2edcd01e7eb8f2fad9c73ea2ac12d365
parentec8f072c1844eda577f64a83e5ecd54b549b78b4 (diff)
parent975a8ed312bbe262171b4c950c52cf992293bd55 (diff)
downloadrust-1e1b7f30228782ebf6168a5e20e63cdd7b9763ff.tar.gz
rust-1e1b7f30228782ebf6168a5e20e63cdd7b9763ff.zip
Auto merge of #27825 - withoutboats:default_array, r=alexcrichton
Implemented Default for arrays up to length 32 where T: Default using an additional macro.
-rw-r--r--src/libcore/array.rs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/libcore/array.rs b/src/libcore/array.rs
index cfe22b89178..d8b363b8cf7 100644
--- a/src/libcore/array.rs
+++ b/src/libcore/array.rs
@@ -21,6 +21,7 @@
 use clone::Clone;
 use cmp::{PartialEq, Eq, PartialOrd, Ord, Ordering};
 use convert::{AsRef, AsMut};
+use default::Default;
 use fmt;
 use hash::{Hash, self};
 use iter::IntoIterator;
@@ -161,3 +162,26 @@ array_impls! {
     20 21 22 23 24 25 26 27 28 29
     30 31 32
 }
+
+// The Default impls cannot be generated using the array_impls! macro because
+// they require array literals.
+
+macro_rules! array_impl_default {
+    {$n:expr, $t:ident $($ts:ident)*} => {
+        #[stable(since = "1.4.0", feature = "array_default")]
+        impl<T> Default for [T; $n] where T: Default {
+            fn default() -> [T; $n] {
+                [$t::default(), $($ts::default()),*]
+            }
+        }
+        array_impl_default!{($n - 1), $($ts)*}
+    };
+    {$n:expr,} => {
+        #[stable(since = "1.4.0", feature = "array_default")]
+        impl<T> Default for [T; $n] {
+            fn default() -> [T; $n] { [] }
+        }
+    };
+}
+
+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}