]> git.lizzy.rs Git - rust.git/commitdiff
improve the performance of the vec![] macro
authorDaniel Micay <danielmicay@gmail.com>
Fri, 10 Oct 2014 10:19:40 +0000 (06:19 -0400)
committerDaniel Micay <danielmicay@gmail.com>
Fri, 10 Oct 2014 18:20:12 +0000 (14:20 -0400)
Closes #17865

src/libcollections/slice.rs
src/libcollections/vec.rs
src/libstd/io/net/tcp.rs
src/libstd/lib.rs
src/libstd/macros.rs

index 138bc63737ed0ca5482a9cd9b1124581481a9361..955a1a5068bcf903bc00e0fa73ce58a341c3fe5d 100644 (file)
@@ -2331,7 +2331,7 @@ fn test_mut_last() {
     fn test_into_vec() {
         let xs = box [1u, 2, 3];
         let ys = xs.into_vec();
-        assert_eq!(ys.as_slice(), [1u, 2, 3]);
+        assert_eq!(ys.as_slice(), [1u, 2, 3].as_slice());
     }
 }
 
index d0105e3b24ab38c73a4eb3d6f8b7d8771fa0236d..a82856c013d647d7a600bbc4669b9b2320a3786b 100644 (file)
@@ -2650,7 +2650,7 @@ fn test_move_items_zero_sized() {
     fn test_into_boxed_slice() {
         let xs = vec![1u, 2, 3];
         let ys = xs.into_boxed_slice();
-        assert_eq!(ys.as_slice(), [1u, 2, 3]);
+        assert_eq!(ys.as_slice(), [1u, 2, 3].as_slice());
     }
 
     #[bench]
index cbd02abff7d2a20b35746be2e7c089a0c9a502b3..e2a850c58e4404e39919074fed73fb5a144dfedc 100644 (file)
@@ -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;
index ca11a7c04b7a5cfd0cde382a2a0362e02ce083af..13adfeecf853610a72880c2e31da6e87911e41e0 100644 (file)
@@ -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![]
 }
index fa356432a673158e7043c48ddf4fe7ddedbecec3..1ad3d6eed942068bdb1758434ec19a37e2144749 100644 (file)
@@ -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.
 ///