1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
#[doc(hidden)]
#[macro_export]
macro_rules! private_parse_expr {
// Entry point. Dup tokens.
{
$caller:tt
input = [{ $($input:tt)* }]
} => {
$crate::private_parse_expr! {
$caller
tokens = [{ $($input)* }]
_tokens = [{ $($input)* }]
}
};
// TODO: our own expression parser for better error recovery
// TODO: support non-empty `rest`
{
$caller:tt
tokens = [{ $e:expr }]
_tokens = [{ $($tokens:tt)* }]
} => {
$crate::tt_return! {
$caller
expr = [{ $($tokens)* }]
rest = [{ }]
}
};
// Unexpected: input does not match $:expr.
{
$caller:tt
tokens = [{ $($unexpected:tt)+ }]
_tokens = [{ $($dup:tt)* }]
} => {
$crate::error_unexpected! {
$($unexpected)*
}
};
}