aboutsummaryrefslogtreecommitdiffhomepage
path: root/c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2025-12-18 20:38:52 +0100
committerlemon <lsof@mailbox.org>2025-12-18 20:39:29 +0100
commit51153d1951461d33fb7e4688af6a5b38caa68841 (patch)
tree377c29e946637b0f268c37631049397a84e889ad /c
parentb11f95cec7468f99d2293863fec8e76e0529d3a8 (diff)
cpp: better error recovery for #define syntax error
Diffstat (limited to 'c')
-rw-r--r--c/lex.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/c/lex.c b/c/lex.c
index 25cd50c..b9b2635 100644
--- a/c/lex.c
+++ b/c/lex.c
@@ -780,14 +780,15 @@ ppdefine(struct lexer *lx)
while (lex0(lx, &tk) != ')') {
if (mac.variadic) {
error(&tk.span, "expected `)' after `...'");
- if (tk.t == TKEOF)
- return;
+ if (tk.t == TKEOF || tk.t == '\n') return;
else break;
}
if (params.n > 0) {
- if (tk.t != ',')
+ if (tk.t != ',') {
error(&tk.span, "expected `,' or `)'");
- if (tk.t == TKEOF) return;
+ if (tk.t == TKEOF || tk.t == '\n') return;
+ else break;
+ }
lex0(lx, &tk);
}
if (isppident(tk))
@@ -797,8 +798,8 @@ ppdefine(struct lexer *lx)
vpush(&params, intern("__VA_ARGS__"));
} else {
error(&tk.span, "expected parameter name or `)'");
- if (tk.t == TKEOF)
- return;
+ if (tk.t == TKEOF || tk.t == '\n') return;
+ else break;
}
}
if (!params.n) vfree(&params);