Implement test suite seq macro without tt muncher

This commit is contained in:
David Tolnay committed 2022-01-20 19:40:58 -08:00
1 parent 157dc44c51
commit 7e39623f72
4 files changed
+32 -31

No files matched your search

+17 -16
View File
@@ -1,3 +1,6 @@
use serde_test::Token;
use std::iter;
macro_rules! btreeset {
() => {
BTreeSet::new()
@@ -54,23 +57,21 @@ macro_rules! hashmap {
}};
}
macro_rules! seq_impl {
(.. $first:expr $(,)?) => {
$first.into_iter()
};
(.. $first:expr, $($elem:tt)*) => {
$first.into_iter().chain(seq!($($elem)*))
};
($first:expr $(,)?) => {
Some($first).into_iter()
};
($first:expr, $($elem:tt)*) => {
Some($first).into_iter().chain(seq!($($elem)*))
};
pub trait SingleTokenIntoIterator {
fn into_iter(self) -> iter::Once<Token>;
}
impl SingleTokenIntoIterator for Token {
fn into_iter(self) -> iter::Once<Token> {
iter::once(self)
}
}
macro_rules! seq {
($($tt: tt)*) => {
seq_impl!($($tt)*).collect::<Vec<_>>()
};
($($elem:expr),* $(,)?) => {{
use crate::macros::SingleTokenIntoIterator;
let mut vec = Vec::new();
$(<Vec<Token> as Extend<Token>>::extend(&mut vec, $elem.into_iter());)*
vec
}};
}