misc: grammar(?)
This commit is contained in:
parent
2e19a44c0a
commit
c53bb68b13
2 changed files with 5 additions and 3 deletions
|
@ -181,7 +181,8 @@ mod test {
|
||||||
#[case("(error \"this failed\")", "error: this failed")]
|
#[case("(error \"this failed\")", "error: this failed")]
|
||||||
#[case("(error? (error \"this failed\"))", "true")]
|
#[case("(error? (error \"this failed\"))", "true")]
|
||||||
#[case("(error? 69)", "false")]
|
#[case("(error? 69)", "false")]
|
||||||
#[case("(str 1 2 3)", "error: expected 1 args, got 3")]
|
#[case("(str 1 2 3)", "error: expected 1 arg(s), got 3")]
|
||||||
|
#[case("(hashmap 1 2 3)", "error: expected 4 arg(s), got 3")]
|
||||||
// Meta
|
// Meta
|
||||||
#[case("(eval (list + 1 1))", "2")]
|
#[case("(eval (list + 1 1))", "2")]
|
||||||
#[case("(apply + (list 1 2 3))", "6")]
|
#[case("(apply + (list 1 2 3))", "6")]
|
||||||
|
|
|
@ -1,15 +1,16 @@
|
||||||
|
// TODO: argument count checking should happen at parse time, not at runtime
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! arg_count {
|
macro_rules! arg_count {
|
||||||
($expected:expr, $given:expr) => {
|
($expected:expr, $given:expr) => {
|
||||||
if $expected != $given {
|
if $expected != $given {
|
||||||
return Node::Error(format!("expected {} args, got {}", $expected, $given));
|
return Node::Error(format!("expected {} arg(s), got {}", $expected, $given));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
(modulo: $modulo:expr, $given:expr) => {
|
(modulo: $modulo:expr, $given:expr) => {
|
||||||
if $given % $modulo != 0 {
|
if $given % $modulo != 0 {
|
||||||
return Node::Error(format!(
|
return Node::Error(format!(
|
||||||
"expected {} args, got {}",
|
"expected {} arg(s), got {}",
|
||||||
($given / $modulo) * $modulo + $modulo,
|
($given / $modulo) * $modulo + $modulo,
|
||||||
$given,
|
$given,
|
||||||
));
|
));
|
||||||
|
|
Loading…
Reference in a new issue