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}