diff options
| author | 2022-08-06 05:58:08 +0200 | |
|---|---|---|
| committer | 2022-08-06 05:58:08 +0200 | |
| commit | 6c0dc2b1171b22a93e61f50fa46852a70e129e50 (patch) | |
| tree | ae6b62edb201d7cbcfe4b1fed528bf875b9919b1 /bootstrap/parse.c | |
| parent | 762c6c17c9effd360a6e00a440964cb176cf96e7 (diff) | |
revert 762c6c17
Diffstat (limited to 'bootstrap/parse.c')
| -rw-r--r-- | bootstrap/parse.c | 44 |
1 files changed, 3 insertions, 41 deletions
diff --git a/bootstrap/parse.c b/bootstrap/parse.c index 2b0f08e..4372cdc 100644 --- a/bootstrap/parse.c +++ b/bootstrap/parse.c @@ -1642,7 +1642,6 @@ parseexpandmacro(struct parser *P, const struct macro *macro) { struct expan expan = {0}; struct expanarg *expanargs; struct macrocase c; - bool bodyarg = 0; expan.span = lexpeek(P).span; lexexpect(P, '('); @@ -1686,42 +1685,11 @@ parseexpandmacro(struct parser *P, const struct macro *macro) { } } - if (lexmatch(P, &tok, '{')) { - int pabal = 0, - bkbal = 0, - bcbal = 1; - struct span espan = tok.span; - vec_t(struct tok) toks = {0}; - struct toktree ttoks; - vec_push(&toks, (struct tok){'{'}); - bodyarg = 1; - - while (bcbal > 0) { - tok = lex(P); - switch (tok.t) { - case '[': ++bkbal; break; - case ']': --bkbal; break; - case '{': ++bcbal; break; - case '}': --bcbal; break; - case '(': ++pabal; break; - case ')': --pabal; break; - case TKeof: - fatal(P, espan, "unterminated macro `%s' invokation", macro->name); - } - vec_push(&toks, tok); - } - - vec_slice_cpy(&ttoks, &toks); - vec_push(&args, ttoks); - } - for (int i = 0; i < macro->cs.n; ++i) { c = macro->cs.d[i]; - if (c.bodyarg && bodyarg && args.length == c.params.n) { - goto ok; - } else if (!c.variadic && args.length == c.params.n && !bodyarg) { + if (!c.variadic && args.length == c.params.n) { goto ok; - } else if (c.variadic && args.length >= c.params.n - 1 && !bodyarg) { + } else if (c.variadic && args.length >= c.params.n - 1) { int n = args.length - (c.params.n - 1); if (n == 0) { vec_push(&args, (struct toktree){0}); @@ -1971,14 +1939,8 @@ parsemacrocase(struct parser *P) { lexexpect(P, ')'); break; } else { - if (lexmatch(P, &tok, '&')) - c.bodyarg = 1; vec_push(¶ms, lexexpects(P, TKident, "parameter name").str); - if (c.bodyarg) { - lexmatch(P, &tok, ','); - lexexpect(P, ')'); - break; - } else if (!lexmatch(P, &tok, ',')) { + if (!lexmatch(P, &tok, ',')) { lexexpect(P, ')'); break; } |