commit - 3d1d2398a3a7e94e5a9422b48b6dd2b077d1772e
commit + 7d79f46c9aff2c04161eb13e3e0c4467795a7a03
blob - b8eae69506de058d29202e1e6b4d3cf39aae0370
blob + 8735f24bd0c12b7159d6687776b08f688c2197e7
--- np.y
+++ np.y
funcall : procname {
prepare_funcall();
} '(' args optcomma ')' {
+ struct proc *proc;
+ int argc;
+
$$ = op_funcall($1);
- if ($$->v.funcall.argc != $$->v.funcall.proc->minargs) {
- yyerror("invalid arity for `%s'",
- $1->name);
+ proc = $$->v.funcall.proc;
+ argc = $$->v.funcall.argc;
+
+ if (argc != proc->minargs && !proc->vararg) {
+ yyerror("invalid arity for `%s': want %d arguments "
+ "but %d given.", $1->name, proc->minargs, argc);
/* TODO: recursively free $$ */
YYERROR;
}
+
+ if (argc < proc->minargs && proc->vararg) {
+ yyerror("invalid arity for `%s': want at least %d "
+ "arguments but %d given.", $1->name, proc->minargs,
+ argc);
+ /* TODO: recursively free $$ */
+ YYERROR;
+ }
}
;