From 6c0dc2b1171b22a93e61f50fa46852a70e129e50 Mon Sep 17 00:00:00 2001 From: lemon Date: Sat, 6 Aug 2022 05:58:08 +0200 Subject: revert 762c6c17 --- bootstrap/parse.c | 44 +++----------------------------------------- 1 file changed, 3 insertions(+), 41 deletions(-) (limited to 'bootstrap/parse.c') 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; } -- cgit v1.2.3