Auto merge of #221 - cuviper:crate-macro, r=mbrubeck

Make sure smallvec! is usable without being in scope

Macro recursion should use a `$crate` prefix to reliably find itself.
This commit is contained in:
bors-servo
2020-05-06 19:29:49 -04:00
committed by GitHub
2 changed files with 26 additions and 1 deletions
+1 -1
View File
@@ -145,7 +145,7 @@ macro_rules! smallvec {
$crate::SmallVec::from_elem($elem, $n)
});
($($x:expr),*$(,)*) => ({
let count = 0usize $(+ smallvec!(@one $x))*;
let count = 0usize $(+ $crate::smallvec!(@one $x))*;
let mut vec = $crate::SmallVec::new();
if count <= vec.inline_size() {
$(vec.push($x);)*
+25
View File
@@ -0,0 +1,25 @@
/// This file tests `smallvec!` without actually having the macro in scope.
/// This forces any recursion to use a `$crate` prefix to reliably find itself.
#[test]
fn smallvec() {
let mut vec: smallvec::SmallVec<[i32; 2]>;
macro_rules! check {
($init:tt) => {
vec = smallvec::smallvec! $init;
assert_eq!(*vec, *vec! $init);
}
}
check!([0; 0]);
check!([1; 1]);
check!([2; 2]);
check!([3; 3]);
check!([]);
check!([1]);
check!([1, 2]);
check!([1, 2, 3]);
}