diff options
| author | 2025-12-18 20:38:52 +0100 | |
|---|---|---|
| committer | 2025-12-18 20:39:29 +0100 | |
| commit | 51153d1951461d33fb7e4688af6a5b38caa68841 (patch) | |
| tree | 377c29e946637b0f268c37631049397a84e889ad | |
| parent | b11f95cec7468f99d2293863fec8e76e0529d3a8 (diff) | |
cpp: better error recovery for #define syntax error
| -rw-r--r-- | c/lex.c | 13 |
1 files changed, 7 insertions, 6 deletions
@@ -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); |