about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libextra/uuid.rs7
-rw-r--r--src/libstd/bool.rs7
-rw-r--r--src/libstd/char.rs10
-rw-r--r--src/libstd/default.rs12
-rw-r--r--src/libstd/num/f32.rs6
-rw-r--r--src/libstd/num/f64.rs6
-rw-r--r--src/libstd/num/float.rs6
-rw-r--r--src/libstd/num/int_macros.rs6
-rw-r--r--src/libstd/num/uint_macros.rs6
-rw-r--r--src/libstd/option.rs1
-rw-r--r--src/libstd/tuple.rs9
-rw-r--r--src/libstd/unit.rs11
12 files changed, 82 insertions, 5 deletions
diff --git a/src/libextra/uuid.rs b/src/libextra/uuid.rs
index b2c0f24824f..2641c1379e4 100644
--- a/src/libextra/uuid.rs
+++ b/src/libextra/uuid.rs
@@ -417,6 +417,13 @@ impl Uuid {
     }
 }
 
+impl Default for Uuid {
+    /// Returns the nil UUID, which is all zeroes
+    fn default() -> Uuid {
+        Uuid::new_nil()
+    }
+}
+
 impl Zero for Uuid {
     /// Returns the nil UUID, which is all zeroes
     fn zero() -> Uuid {
diff --git a/src/libstd/bool.rs b/src/libstd/bool.rs
index 926e6e1f6b6..4ef50094139 100644
--- a/src/libstd/bool.rs
+++ b/src/libstd/bool.rs
@@ -24,6 +24,7 @@ Implementations of the following traits:
 * `Ord`
 * `TotalOrd`
 * `Eq`
+* `Default`
 * `Zero`
 
 ## Various functions to compare `bool`s
@@ -43,6 +44,7 @@ use to_str::ToStr;
 
 #[cfg(not(test))] use cmp::{Eq, Ord, TotalOrd, Ordering};
 #[cfg(not(test))] use ops::Not;
+#[cfg(not(test))] use default::Default;
 #[cfg(not(test))] use num::Zero;
 
 /**
@@ -324,6 +326,11 @@ impl Eq for bool {
 }
 
 #[cfg(not(test))]
+impl Default for bool {
+    fn default() -> bool { false }
+}
+
+#[cfg(not(test))]
 impl Zero for bool {
     fn zero() -> bool { false }
     fn is_zero(&self) -> bool { *self == false }
diff --git a/src/libstd/char.rs b/src/libstd/char.rs
index 7f043b2ecaa..3a01e5908d9 100644
--- a/src/libstd/char.rs
+++ b/src/libstd/char.rs
@@ -21,6 +21,7 @@ use str;
 #[cfg(test)] use str::OwnedStr;
 
 #[cfg(not(test))] use cmp::{Eq, Ord};
+#[cfg(not(test))] use default::Default;
 #[cfg(not(test))] use num::Zero;
 
 // UTF-8 ranges and tags for encoding characters
@@ -435,8 +436,17 @@ impl Ord for char {
 }
 
 #[cfg(not(test))]
+impl Default for char {
+    #[inline]
+    fn default() -> char { '\x00' }
+}
+
+#[cfg(not(test))]
 impl Zero for char {
+    #[inline]
     fn zero() -> char { '\x00' }
+
+    #[inline]
     fn is_zero(&self) -> bool { *self == '\x00' }
 }
 
diff --git a/src/libstd/default.rs b/src/libstd/default.rs
index fbc60ffd01b..120cf3fa801 100644
--- a/src/libstd/default.rs
+++ b/src/libstd/default.rs
@@ -15,3 +15,15 @@ pub trait Default {
     /// Return the "default value" for a type.
     fn default() -> Self;
 }
+
+impl<T: Default + 'static> Default for @mut T {
+    fn default() -> @mut T { @mut Default::default() }
+}
+
+impl<T: Default + 'static> Default for @T {
+    fn default() -> @T { @Default::default() }
+}
+
+impl<T: Default> Default for ~T {
+    fn default() -> ~T { ~Default::default() }
+}
diff --git a/src/libstd/num/f32.rs b/src/libstd/num/f32.rs
index 899d6236aaa..0addcce3eb6 100644
--- a/src/libstd/num/f32.rs
+++ b/src/libstd/num/f32.rs
@@ -12,6 +12,7 @@
 #[allow(missing_doc)];
 #[allow(non_uppercase_statics)];
 
+use default::Default;
 use libc::c_int;
 use num::{Zero, One, strconv};
 use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal};
@@ -237,6 +238,11 @@ impl Orderable for f32 {
     }
 }
 
+impl Default for f32 {
+    #[inline]
+    fn default() -> f32 { 0.0 }
+}
+
 impl Zero for f32 {
     #[inline]
     fn zero() -> f32 { 0.0 }
diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs
index 6ab8350a115..b0675278238 100644
--- a/src/libstd/num/f64.rs
+++ b/src/libstd/num/f64.rs
@@ -13,6 +13,7 @@
 #[allow(missing_doc)];
 #[allow(non_uppercase_statics)];
 
+use default::Default;
 use libc::c_int;
 use num::{Zero, One, strconv};
 use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal};
@@ -260,6 +261,11 @@ impl Orderable for f64 {
     }
 }
 
+impl Default for f64 {
+    #[inline]
+    fn default() -> f64 { 0.0 }
+}
+
 impl Zero for f64 {
     #[inline]
     fn zero() -> f64 { 0.0 }
diff --git a/src/libstd/num/float.rs b/src/libstd/num/float.rs
index df26fadae16..3952f5478f7 100644
--- a/src/libstd/num/float.rs
+++ b/src/libstd/num/float.rs
@@ -23,6 +23,7 @@
 #[allow(missing_doc)];
 #[allow(non_uppercase_statics)];
 
+use default::Default;
 use num::{Zero, One, strconv};
 use num::FPCategory;
 use num;
@@ -382,6 +383,11 @@ impl Orderable for float {
     }
 }
 
+impl Default for float {
+    #[inline]
+    fn default() -> float { 0.0 }
+}
+
 impl Zero for float {
     #[inline]
     fn zero() -> float { 0.0 }
diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs
index 07cafb0a4f1..ae2a56b835d 100644
--- a/src/libstd/num/int_macros.rs
+++ b/src/libstd/num/int_macros.rs
@@ -16,6 +16,7 @@ macro_rules! int_module (($T:ty, $bits:expr) => (mod generated {
 
 #[allow(non_uppercase_statics)];
 
+use default::Default;
 use num::{ToStrRadix, FromStrRadix};
 use num::{CheckedDiv, Zero, One, strconv};
 use prelude::*;
@@ -167,6 +168,11 @@ impl Orderable for $T {
     }
 }
 
+impl Default for $T {
+    #[inline]
+    fn default() -> $T { 0 }
+}
+
 impl Zero for $T {
     #[inline]
     fn zero() -> $T { 0 }
diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs
index effeb60fc22..3deb7312b04 100644
--- a/src/libstd/num/uint_macros.rs
+++ b/src/libstd/num/uint_macros.rs
@@ -16,6 +16,7 @@ macro_rules! uint_module (($T:ty, $T_SIGNED:ty, $bits:expr) => (mod generated {
 
 #[allow(non_uppercase_statics)];
 
+use default::Default;
 use num::BitCount;
 use num::{ToStrRadix, FromStrRadix};
 use num::{CheckedDiv, Zero, One, strconv};
@@ -172,6 +173,11 @@ impl Orderable for $T {
     }
 }
 
+impl Default for $T {
+    #[inline]
+    fn default() -> $T { 0 }
+}
+
 impl Zero for $T {
     #[inline]
     fn zero() -> $T { 0 }
diff --git a/src/libstd/option.rs b/src/libstd/option.rs
index 9b5b28d5ceb..dd5b71c6dd4 100644
--- a/src/libstd/option.rs
+++ b/src/libstd/option.rs
@@ -459,6 +459,7 @@ impl<T: Default> Option<T> {
 }
 
 impl<T> Default for Option<T> {
+    #[inline]
     fn default() -> Option<T> { None }
 }
 
diff --git a/src/libstd/tuple.rs b/src/libstd/tuple.rs
index 5d9ca6202e2..2591131f215 100644
--- a/src/libstd/tuple.rs
+++ b/src/libstd/tuple.rs
@@ -89,6 +89,7 @@ macro_rules! tuple_impls {
         pub mod inner {
             use clone::Clone;
             #[cfg(not(test))] use cmp::*;
+            #[cfg(not(test))] use default::Default;
             #[cfg(not(test))] use num::Zero;
 
             $(
@@ -173,6 +174,14 @@ macro_rules! tuple_impls {
                 }
 
                 #[cfg(not(test))]
+                impl<$($T:Default),+> Default for ($($T,)+) {
+                    #[inline]
+                    fn default() -> ($($T,)+) {
+                        ($({ let x: $T = Default::default(); x},)+)
+                    }
+                }
+
+                #[cfg(not(test))]
                 impl<$($T:Zero),+> Zero for ($($T,)+) {
                     #[inline]
                     fn zero() -> ($($T,)+) {
diff --git a/src/libstd/unit.rs b/src/libstd/unit.rs
index 3af0322df56..dfe4abe54e5 100644
--- a/src/libstd/unit.rs
+++ b/src/libstd/unit.rs
@@ -46,14 +46,15 @@ impl TotalEq for () {
 }
 
 #[cfg(not(test))]
+impl Default for () {
+    #[inline]
+    fn default() -> () { () }
+}
+
+#[cfg(not(test))]
 impl Zero for () {
     #[inline]
     fn zero() -> () { () }
     #[inline]
     fn is_zero(&self) -> bool { true }
 }
-
-#[cfg(not(test))]
-impl Default for () {
-    fn default() -> () { () }
-}