diff --git a/mute-interpreter/src/evaluator.rs b/mute-interpreter/src/evaluator.rs index 92e52a0..873607d 100644 --- a/mute-interpreter/src/evaluator.rs +++ b/mute-interpreter/src/evaluator.rs @@ -181,7 +181,8 @@ mod test { #[case("(error \"this failed\")", "error: this failed")] #[case("(error? (error \"this failed\"))", "true")] #[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 #[case("(eval (list + 1 1))", "2")] #[case("(apply + (list 1 2 3))", "6")] diff --git a/mute-interpreter/src/macros.rs b/mute-interpreter/src/macros.rs index 814915a..219d320 100644 --- a/mute-interpreter/src/macros.rs +++ b/mute-interpreter/src/macros.rs @@ -1,15 +1,16 @@ +// 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 {} args, got {}", $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 {} args, got {}", + "expected {} arg(s), got {}", ($given / $modulo) * $modulo + $modulo, $given, ));