fix: provide details on argument count errors

This commit is contained in:
Roman Godmaire 2024-02-17 06:58:22 -05:00
parent 4e7c8eba01
commit 288e2f4feb
2 changed files with 9 additions and 9 deletions

View file

@ -107,7 +107,7 @@ pub fn core_environment() -> Rc<Environment> {
"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<Environment> {
"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<Environment> {
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<Environment> {
"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<Environment> {
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<Environment> {
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);

View file

@ -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<Environment>, ast: Vec<Node>) -> Result<Vec<Rc<Expression>>> {
@ -137,7 +137,7 @@ fn eval_ast_node(env: Rc<Environment>, ast_node: Node) -> Result<Rc<Expression>>
} => {
let args = list;
if args.len() != params.len() {
Err(Error::MismatchedArgCount)?
Err(Error::MismatchedArgCount(params.len(), args.len()))?
}
let args = args