From 51153d1951461d33fb7e4688af6a5b38caa68841 Mon Sep 17 00:00:00 2001 From: lemon Date: Thu, 18 Dec 2025 20:38:52 +0100 Subject: cpp: better error recovery for #define syntax error --- c/lex.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'c') 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(¶ms, 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(¶ms); -- cgit v1.2.3