diff options
| author | bors <bors@rust-lang.org> | 2014-10-10 18:47:03 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-10-10 18:47:03 +0000 |
| commit | 1add4dedc131d5f98d82feafe80d92ed1f3f6d49 (patch) | |
| tree | 18aa940fca2ce459476c5cffb1eae46e4caf9363 /src/libstd | |
| parent | 78a7676898d9f80ab540c6df5d4c9ce35bb50463 (diff) | |
| parent | 02d976a7f9ae838901b50b64109d90d54619fe4d (diff) | |
| download | rust-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.rs | 1 | ||||
| -rw-r--r-- | src/libstd/lib.rs | 6 | ||||
| -rw-r--r-- | src/libstd/macros.rs | 16 | ||||
| -rw-r--r-- | src/libstd/prelude.rs | 2 |
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; |
