aboutsummaryrefslogtreecommitdiff
path: root/bootstrap/parse.c
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2022-08-06 05:58:08 +0200
committerlemon <lsof@mailbox.org>2022-08-06 05:58:08 +0200
commit6c0dc2b1171b22a93e61f50fa46852a70e129e50 (patch)
treeae6b62edb201d7cbcfe4b1fed528bf875b9919b1 /bootstrap/parse.c
parent762c6c17c9effd360a6e00a440964cb176cf96e7 (diff)
revert 762c6c17
Diffstat (limited to 'bootstrap/parse.c')
-rw-r--r--bootstrap/parse.c44
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(&params, 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;
}