about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-10-10 18:47:03 +0000
committerbors <bors@rust-lang.org>2014-10-10 18:47:03 +0000
commit1add4dedc131d5f98d82feafe80d92ed1f3f6d49 (patch)
tree18aa940fca2ce459476c5cffb1eae46e4caf9363 /src/libstd
parent78a7676898d9f80ab540c6df5d4c9ce35bb50463 (diff)
parent02d976a7f9ae838901b50b64109d90d54619fe4d (diff)
downloadrust-1add4dedc131d5f98d82feafe80d92ed1f3f6d49.tar.gz
rust-1add4dedc131d5f98d82feafe80d92ed1f3f6d49.zip
auto merge of #17920 : thestinger/rust/vec, r=aturon
Introduce conversions between `Box<[T]>` and `Vec<T>` and use it to reimplement the `vec![]` macro for efficiency.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/io/net/tcp.rs1
-rw-r--r--src/libstd/lib.rs6
-rw-r--r--src/libstd/macros.rs16
-rw-r--r--src/libstd/prelude.rs2
4 files changed, 12 insertions, 13 deletions
diff --git a/src/libstd/io/net/tcp.rs b/src/libstd/io/net/tcp.rs
index cbd02abff7d..e2a850c58e4 100644
--- a/src/libstd/io/net/tcp.rs
+++ b/src/libstd/io/net/tcp.rs
@@ -18,7 +18,6 @@
 //! listener (socket server) implements the `Listener` and `Acceptor` traits.
 
 use clone::Clone;
-use collections::MutableSeq;
 use io::IoResult;
 use iter::Iterator;
 use slice::ImmutableSlice;
diff --git a/src/libstd/lib.rs b/src/libstd/lib.rs
index ca11a7c04b7..13adfeecf85 100644
--- a/src/libstd/lib.rs
+++ b/src/libstd/lib.rs
@@ -272,7 +272,9 @@ mod std {
     // The test runner calls ::std::os::args() but really wants realstd
     #[cfg(test)] pub use realstd::os as os;
     // The test runner requires std::slice::Vector, so re-export std::slice just for it.
-    #[cfg(test)] pub use slice;
+    //
+    // It is also used in vec![]
+    pub use slice;
 
-    pub use collections; // vec!() uses MutableSeq
+    pub use boxed; // used for vec![]
 }
diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs
index fa356432a67..1ad3d6eed94 100644
--- a/src/libstd/macros.rs
+++ b/src/libstd/macros.rs
@@ -323,16 +323,14 @@ macro_rules! try(
 
 /// Create a `std::vec::Vec` containing the arguments.
 #[macro_export]
-macro_rules! vec(
-    ($($e:expr),*) => ({
-        // leading _ to allow empty construction without a warning.
-        let mut _temp = ::std::vec::Vec::new();
-        $(_temp.push($e);)*
-        _temp
+macro_rules! vec[
+    ($($x:expr),*) => ({
+        use std::slice::BoxedSlice;
+        let xs: ::std::boxed::Box<[_]> = box [$($x),*];
+        xs.into_vec()
     });
-    ($($e:expr),+,) => (vec!($($e),+))
-)
-
+    ($($x:expr,)*) => (vec![$($x),*])
+]
 
 /// A macro to select an event from a number of receivers.
 ///
diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs
index abfb2de13c5..db9f3114cda 100644
--- a/src/libstd/prelude.rs
+++ b/src/libstd/prelude.rs
@@ -88,7 +88,7 @@
 #[doc(no_inline)] pub use slice::{MutableCloneableSlice, MutableOrdSlice};
 #[doc(no_inline)] pub use slice::{ImmutableSlice, MutableSlice};
 #[doc(no_inline)] pub use slice::{ImmutablePartialEqSlice, ImmutableOrdSlice};
-#[doc(no_inline)] pub use slice::{AsSlice, VectorVector};
+#[doc(no_inline)] pub use slice::{AsSlice, VectorVector, BoxedSlice};
 #[doc(no_inline)] pub use slice::MutableSliceAllocating;
 #[doc(no_inline)] pub use string::String;
 #[doc(no_inline)] pub use vec::Vec;