#[macro_export]
macro_rules! raster {
($expr:expr) => {{
use $crate::dsl::{parse_expression, CompiledProgram};
use $crate::dsl::ast::{Program, Statement};
let expr_str = stringify!($expr);
let parsed = parse_expression(expr_str)?;
let program = Program {
statements: vec![Statement::Expr(Box::new(parsed))],
};
CompiledProgram::new(program)
}};
({ $($stmt:stmt);+ }) => {{
use $crate::dsl::{parse_program, CompiledProgram};
let program_str = stringify!({ $($stmt);+ });
let parsed = parse_program(program_str)?;
CompiledProgram::new(parsed)
}};
}
#[macro_export]
macro_rules! dsl_function {
(fn $name:ident ( $($param:ident),* ) = $body:expr ;) => {
pub fn $name() -> &'static str {
concat!(
"fn ",
stringify!($name),
"(",
$( stringify!($param), "," ),*
") = ",
stringify!($body),
";"
)
}
};
}
#[cfg(test)]
mod tests {
#[test]
fn test_macro_expansion() {
}
}