tt_call/rust/
expr.rs

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