my_ast/
statement.rs

1
2use crate::Expression;
3
4#[derive(Clone, Debug, PartialEq)]
5pub enum Statement {
6    LetBind {
7        name: String,
8        expr: Expression
9    },
10    Expression(Expression),
11}
12
13#[macro_export]
14macro_rules! stmt {
15    ((let $id:ident $e:tt)) => {
16        Statement::LetBind {
17            name: stringify!($id).to_string(),
18            expr: expr!($e)
19        }
20    };
21    ($e:tt) => {
22        Statement::Expression(expr!($e))
23    }
24}
25
26
27#[test]
28fn stmt() {
29    stmt!((let x 1));
30    stmt!(1);
31}