aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/eval.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr/eval.cc')
-rw-r--r--src/libexpr/eval.cc14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 2f0c7e5cd..551ed4ba5 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -765,11 +765,15 @@ void EvalState::callFunction(Value & fun, Value & arg, Value & v)
}
/* Check that each actual argument is listed as a formal
- argument (unless the attribute match specifies a `...').
- TODO: show the names of the expected/unexpected
- arguments. */
- if (!fun.lambda.fun->formals->ellipsis && attrsUsed != arg.attrs->size())
- throwTypeError("function at %1% called with unexpected argument", fun.lambda.fun->pos);
+ argument (unless the attribute match specifies a `...'). */
+ if (!fun.lambda.fun->formals->ellipsis && attrsUsed != arg.attrs->size()) {
+ /* Nope, so show the first unexpected argument to the
+ user. */
+ foreach (Bindings::iterator, i, *arg.attrs)
+ if (fun.lambda.fun->formals->argNames.find(i->name) == fun.lambda.fun->formals->argNames.end())
+ throwTypeError("function at %1% called with unexpected argument `%2%'", fun.lambda.fun->pos, i->name);
+ abort(); // can't happen
+ }
}
nrFunctionCalls++;