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
#[macro_export]
macro_rules! parser_report {
    ($state:expr, $issue:ident($($args:expr),+$(,)?)$(,)?) => {
        {
            let issue = $crate::parser::issue::$issue($state, $($args,)+);

            $state.record(issue);
        }
    };
    ($state:expr, $issue:ident) => {
        {
            let issue = $crate::parser::issue::$issue($state);

            $state.record(issue);
        }
    };
}

#[macro_export]
macro_rules! parser_bail {
    ($state:expr, $issue:ident($($args:expr),+$(,)?)$(,)?) => {
        {
            let issue = $crate::parser::issue::$issue($state, $($args,)+);

            return Err(Box::new($state.report(issue)));
        }
    };
    ($state:expr, $issue:ident) => {
        {
            let issue = $crate::parser::issue::$issue($state);

            return Err(Box::new($state.report(issue)));
        }
    };
}