aboutsummaryrefslogtreecommitdiffhomepage
path: root/c
diff options
context:
space:
mode:
Diffstat (limited to 'c')
-rw-r--r--c/lex.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/c/lex.c b/c/lex.c
index b08a704..d6aa95a 100644
--- a/c/lex.c
+++ b/c/lex.c
@@ -1048,11 +1048,13 @@ expandfnmacro(struct lexer *lx, struct span *span, internstr mname, struct macro
++i;
}
joinspan(&span->ex, tk.span.ex);
- if (narg < mac->nparam)
- error(span, "macro `%s' passed %d arguments, but takes %d", mname, narg, mac->nparam);
- else if (toomany) {
+ if (narg < mac->nparam) {
+ warn(span, "macro `%s' passed %d arguments, but takes %d", mname, narg, mac->nparam);
+ for (int i = narg; i < mac->nparam; ++i)
+ args[i].n = 0;
+ } else if (toomany) {
joinspan(&excessspan.ex, tk.span.ex);
- error(&excessspan, "macro `%s' passed %d arguments, but takes just %d", mname, narg, mac->nparam);
+ warn(&excessspan, "macro `%s' passed %d arguments, but takes just %d", mname, narg, mac->nparam);
}
if (mac->special) {
mac->handlerfn(lx, &tk, (struct rlist){argsbuf.p, argsbuf.n});