diff options
| author | Keegan McAllister <kmcallister@mozilla.com> | 2014-09-15 19:29:47 -0700 |
|---|---|---|
| committer | Keegan McAllister <kmcallister@mozilla.com> | 2015-01-05 12:00:56 -0800 |
| commit | 73806ddd0fd91066d7b903a00a080cbadcc04311 (patch) | |
| tree | 04df4f385e3e01a3f278862f190026aa6daca966 /src/libcollections | |
| parent | 1c2fddc6bf6332212fe899c2cb86ae7e645f6eba (diff) | |
| download | rust-73806ddd0fd91066d7b903a00a080cbadcc04311.tar.gz rust-73806ddd0fd91066d7b903a00a080cbadcc04311.zip | |
Use $crate and macro reexport to reduce duplicated code
Many of libstd's macros are now re-exported from libcore and libcollections. Their libstd definitions have moved to a macros_stage0 module and can disappear after the next snapshot. Where the two crates had already diverged, I took the libstd versions as they're generally newer and better-tested. See e.g. d3c831b, which was a fix to libstd's assert_eq!() that didn't make it into libcore's. Fixes #16806.
Diffstat (limited to 'src/libcollections')
| -rw-r--r-- | src/libcollections/lib.rs | 3 | ||||
| -rw-r--r-- | src/libcollections/macros.rs | 12 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/libcollections/lib.rs b/src/libcollections/lib.rs index db236795038..27ab791b604 100644 --- a/src/libcollections/lib.rs +++ b/src/libcollections/lib.rs @@ -51,6 +51,9 @@ pub use string::String; pub use vec::Vec; pub use vec_map::VecMap; +// Needed for the vec! macro +pub use alloc::boxed; + mod macros; pub mod binary_heap; diff --git a/src/libcollections/macros.rs b/src/libcollections/macros.rs index ce4b1e46773..0dbc71269a6 100644 --- a/src/libcollections/macros.rs +++ b/src/libcollections/macros.rs @@ -11,6 +11,8 @@ #![macro_escape] /// Creates a `std::vec::Vec` containing the arguments. +// NOTE: remove after the next snapshot +#[cfg(stage0)] macro_rules! vec { ($($e:expr),*) => ({ // leading _ to allow empty construction without a warning. @@ -21,3 +23,13 @@ macro_rules! vec { ($($e:expr),+,) => (vec!($($e),+)) } +/// Creates a `Vec` containing the arguments. +#[cfg(not(stage0))] +#[macro_export] +macro_rules! vec { + ($($x:expr),*) => ({ + let xs: $crate::boxed::Box<[_]> = box [$($x),*]; + $crate::slice::SliceExt::into_vec(xs) + }); + ($($x:expr,)*) => (vec![$($x),*]) +} |
