fix: provide details on argument count errors
This commit is contained in:
parent
4e7c8eba01
commit
288e2f4feb
2 changed files with 9 additions and 9 deletions
|
@ -107,7 +107,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
"hashmap",
|
"hashmap",
|
||||||
Expression::NativeFunc(|args| {
|
Expression::NativeFunc(|args| {
|
||||||
if args.len() % 2 != 0 {
|
if args.len() % 2 != 0 {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(2, args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut index = -1;
|
let mut index = -1;
|
||||||
|
@ -132,7 +132,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
"if",
|
"if",
|
||||||
Expression::NativeFunc(|args| {
|
Expression::NativeFunc(|args| {
|
||||||
if args.len() != 3 {
|
if args.len() != 3 {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(3, args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let (cond, consequence, alternative) =
|
let (cond, consequence, alternative) =
|
||||||
|
@ -152,7 +152,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
Expression::Special(|env, args| {
|
Expression::Special(|env, args| {
|
||||||
let mut args = args.into_iter();
|
let mut args = args.into_iter();
|
||||||
if args.len() != 2 {
|
if args.len() != 2 {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(2, args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let key = match args.next().unwrap() {
|
let key = match args.next().unwrap() {
|
||||||
|
@ -171,7 +171,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
"let*",
|
"let*",
|
||||||
Expression::Special(|env, args| {
|
Expression::Special(|env, args| {
|
||||||
if args.len() != 2 {
|
if args.len() != 2 {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(2, args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut args = args.into_iter();
|
let mut args = args.into_iter();
|
||||||
|
@ -189,7 +189,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
outer: Some(env.clone()),
|
outer: Some(env.clone()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Node::List(_) => Err(Error::MismatchedArgCount)?,
|
Node::List(list) => Err(Error::MismatchedArgCount(2, list.len()))?,
|
||||||
_ => Err(Error::ExpectedList)?,
|
_ => Err(Error::ExpectedList)?,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ pub fn core_environment() -> Rc<Environment> {
|
||||||
Expression::Special(|env, args| {
|
Expression::Special(|env, args| {
|
||||||
let mut args = args;
|
let mut args = args;
|
||||||
if args.len() != 2 {
|
if args.len() != 2 {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(2, args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let arg_list = args.remove(0);
|
let arg_list = args.remove(0);
|
||||||
|
|
|
@ -89,8 +89,8 @@ pub enum Error {
|
||||||
ExpectedSymbol,
|
ExpectedSymbol,
|
||||||
#[error("expected list")]
|
#[error("expected list")]
|
||||||
ExpectedList,
|
ExpectedList,
|
||||||
#[error("incorrect number of arguments passed to function")]
|
#[error("expected {0} arguments, got {1}")]
|
||||||
MismatchedArgCount,
|
MismatchedArgCount(usize, usize),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn eval(env: Rc<Environment>, ast: Vec<Node>) -> Result<Vec<Rc<Expression>>> {
|
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;
|
let args = list;
|
||||||
if args.len() != params.len() {
|
if args.len() != params.len() {
|
||||||
Err(Error::MismatchedArgCount)?
|
Err(Error::MismatchedArgCount(params.len(), args.len()))?
|
||||||
}
|
}
|
||||||
|
|
||||||
let args = args
|
let args = args
|
||||||
|
|
Loading…
Reference in a new issue