From 288e2f4feb04197301adac2673c1b0031acb25ea Mon Sep 17 00:00:00 2001 From: Roman Godmaire Date: Sat, 17 Feb 2024 06:58:22 -0500 Subject: [PATCH] fix: provide details on argument count errors --- src/evaluator/env.rs | 12 ++++++------ src/evaluator/mod.rs | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/evaluator/env.rs b/src/evaluator/env.rs index e5139ba..685acb9 100644 --- a/src/evaluator/env.rs +++ b/src/evaluator/env.rs @@ -107,7 +107,7 @@ pub fn core_environment() -> Rc { "hashmap", Expression::NativeFunc(|args| { if args.len() % 2 != 0 { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(2, args.len()))? } let mut index = -1; @@ -132,7 +132,7 @@ pub fn core_environment() -> Rc { "if", Expression::NativeFunc(|args| { if args.len() != 3 { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(3, args.len()))? } let (cond, consequence, alternative) = @@ -152,7 +152,7 @@ pub fn core_environment() -> Rc { Expression::Special(|env, args| { let mut args = args.into_iter(); if args.len() != 2 { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(2, args.len()))? } let key = match args.next().unwrap() { @@ -171,7 +171,7 @@ pub fn core_environment() -> Rc { "let*", Expression::Special(|env, args| { if args.len() != 2 { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(2, args.len()))? } let mut args = args.into_iter(); @@ -189,7 +189,7 @@ pub fn core_environment() -> Rc { outer: Some(env.clone()), } } - Node::List(_) => Err(Error::MismatchedArgCount)?, + Node::List(list) => Err(Error::MismatchedArgCount(2, list.len()))?, _ => Err(Error::ExpectedList)?, }; @@ -201,7 +201,7 @@ pub fn core_environment() -> Rc { Expression::Special(|env, args| { let mut args = args; if args.len() != 2 { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(2, args.len()))? } let arg_list = args.remove(0); diff --git a/src/evaluator/mod.rs b/src/evaluator/mod.rs index ecd9421..0e2ff06 100644 --- a/src/evaluator/mod.rs +++ b/src/evaluator/mod.rs @@ -89,8 +89,8 @@ pub enum Error { ExpectedSymbol, #[error("expected list")] ExpectedList, - #[error("incorrect number of arguments passed to function")] - MismatchedArgCount, + #[error("expected {0} arguments, got {1}")] + MismatchedArgCount(usize, usize), } pub fn eval(env: Rc, ast: Vec) -> Result>> { @@ -137,7 +137,7 @@ fn eval_ast_node(env: Rc, ast_node: Node) -> Result> } => { let args = list; if args.len() != params.len() { - Err(Error::MismatchedArgCount)? + Err(Error::MismatchedArgCount(params.len(), args.len()))? } let args = args