summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--lib.c19
2 files changed, 22 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 4397eac6..eb529b7d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2015-08-05 Kaz Kylheku <kaz@kylheku.com>
+ Better diagnostic in funcall family of functions.
+
+ * lib.c (wrongargs): New static function.
+ (funcall, funcall2, funcall2, funcall3, funcall4):
+ Use wrongargs.
+
+2015-08-05 Kaz Kylheku <kaz@kylheku.com>
+
* eval.c (do_eval): Bugfix: though last_form_evaled is
saved and restored around the execution of a special operator,
it is never set the current form.
diff --git a/lib.c b/lib.c
index e954d932..65394f76 100644
--- a/lib.c
+++ b/lib.c
@@ -4411,6 +4411,15 @@ val generic_funcall(val fun, val arg[], int nargs)
internal_error("corrupt function type field");
}
+static noreturn void wrongargs(val fun)
+{
+ uses_or2;
+ prinl(last_form_evaled, nil);
+ uw_throwf(error_s, lit("~s: wrong number of arguments"),
+ or2(func_get_name(fun, nil), fun), nao);
+ abort();
+}
+
val funcall(val fun)
{
if (type(fun) != FUN || fun->f.optargs) {
@@ -4439,7 +4448,7 @@ val funcall(val fun)
break;
}
}
- uw_throw(error_s, lit("call: wrong number of arguments"));
+ wrongargs(fun);
}
val funcall1(val fun, val arg)
@@ -4475,7 +4484,7 @@ val funcall1(val fun, val arg)
break;
}
}
- uw_throw(error_s, lit("call: wrong number of arguments"));
+ wrongargs(fun);
}
val funcall2(val fun, val arg1, val arg2)
@@ -4517,7 +4526,7 @@ val funcall2(val fun, val arg1, val arg2)
break;
}
}
- uw_throw(error_s, lit("call: wrong number of arguments"));
+ wrongargs(fun);
}
val funcall3(val fun, val arg1, val arg2, val arg3)
@@ -4564,7 +4573,7 @@ val funcall3(val fun, val arg1, val arg2, val arg3)
break;
}
}
- uw_throw(error_s, lit("call: wrong number of arguments"));
+ wrongargs(fun);
}
val funcall4(val fun, val arg1, val arg2, val arg3, val arg4)
@@ -4616,7 +4625,7 @@ val funcall4(val fun, val arg1, val arg2, val arg3, val arg4)
break;
}
}
- uw_throw(error_s, lit("call: wrong number of arguments"));
+ wrongargs(fun);
}
val reduce_left(val fun, val list, val init, val key)