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
use crate::Expression; #[derive(Clone, Debug, PartialEq)] pub enum Statement { LetBind { name: String, expr: Expression }, Expression(Expression), } #[macro_export] macro_rules! stmt { ((let $id:ident $e:tt)) => { Statement::LetBind { name: stringify!($id).to_string(), expr: expr!($e) } }; ($e:tt) => { Statement::Expression(expr!($e)) } } #[test] fn stmt() { stmt!((let x 1)); stmt!(1); }