From 1b3a03f1610b714adca41637ccd85a8157e236ab Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 16 May 2013 17:56:14 +0200 Subject: [PATCH] Show which function argument was unexpected Fixes #116. --- src/libexpr/eval.cc | 14 +++++++++----- 1 file 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++;