diff --git a/src/interpreter/interpretable.rs b/src/interpreter/interpretable.rs index fad7aca..51f4589 100644 --- a/src/interpreter/interpretable.rs +++ b/src/interpreter/interpretable.rs @@ -398,8 +398,20 @@ impl ast::ExprNode { } v }; - if let Value::Callable(callable) = &callee { - Ok(callable.borrow().call(environment, arg_values)?.into()) + if let Value::Callable(callable_ref) = &callee { + let callable = callable_ref.borrow(); + if callable.arity() != arg_values.len() { + Err(InterpreterError::new( + right_paren, + &format!( + "expected {} arguments, found {}", + arg_values.len(), + callable.arity() + ), + )) + } else { + Ok(callable.call(environment, arg_values)?.into()) + } } else { Err(InterpreterError::new( right_paren,