21 lines
606 B
Rust
21 lines
606 B
Rust
// TODO: argument count checking should happen at parse time, not at runtime
|
|
#[macro_export]
|
|
macro_rules! arg_count {
|
|
($expected:expr, $given:expr) => {
|
|
if $expected != $given {
|
|
return Node::Error(format!("expected {} arg(s), got {}", $expected, $given));
|
|
}
|
|
};
|
|
|
|
(modulo: $modulo:expr, $given:expr) => {
|
|
if $given % $modulo != 0 {
|
|
return Node::Error(format!(
|
|
"expected {} arg(s), got {}",
|
|
($given / $modulo) * $modulo + $modulo,
|
|
$given,
|
|
));
|
|
}
|
|
};
|
|
}
|
|
|
|
pub(crate) use arg_count;
|