wcc: delete parser backtracking remnants

This commit is contained in:
2026-08-09 04:25:36 +09:00
parent c9425a3b46
commit 80fc13c828

View File

@@ -660,7 +660,6 @@ parseprimary(Parser *p)
advance(p);
while (p->cur.kind == TK_DOT && peek(p).kind == TK_IDENT) {
advance(p);
n = (Node*)n;
Node *mr = newnode(p->a, N_DOT, pp);
mr->lhs = n;
mr->str = p->cur.text;
@@ -896,7 +895,7 @@ parseexpr_top(Parser *p)
}
static Node *
parselet(Parser *p, int top)
parselet(Parser *p)
{
Pos pp = p->cur.pos;
int is_const = 0;
@@ -931,7 +930,6 @@ parselet(Parser *p, int top)
m->op = TK_CONST;
for (Node *l = head; l; l = l->next) l->op = TK_CONST;
}
(void)top;
return m;
}
@@ -961,7 +959,6 @@ parselet(Parser *p, int top)
m->op = TK_CONST;
for (Node *l = head; l; l = l->next) l->op = TK_CONST;
}
(void)top;
return m;
}
@@ -969,7 +966,6 @@ parselet(Parser *p, int top)
first->rhs = parseexpr(p);
expect(p, TK_SEMI);
if (is_const) first->op = TK_CONST;
(void)top;
return first;
}
@@ -1022,11 +1018,7 @@ parsefor(Parser *p)
/* First clause may be 'let' init or expr. If 'let' or terminated
* by ';', it's a C-for. Otherwise it's just `for (cond)`. */
if (p->cur.kind == TK_LET) {
/* Disambiguate range form: `let IDENT .. expr`. We peek
* for IDENT then DOTDOT before committing to parselet.
* Tuple destructure: `let (a, b) .. expr`. */
Tok save_cur = p->cur;
(void)save_cur;
/* Range and three-clause forms share the `let` prefix. */
advance(p);
if (p->cur.kind == TK_LPAREN) {
advance(p);
@@ -1051,7 +1043,6 @@ parsefor(Parser *p)
return parse_for_else(p, rng);
}
if (p->cur.kind == TK_IDENT || p->cur.kind == TK_UNDER) {
Pos ip = p->cur.pos;
const char *nm = p->cur.text;
int isunder = p->cur.kind == TK_UNDER;
Tok la = peek(p);
@@ -1063,7 +1054,6 @@ parsefor(Parser *p)
rng->lhs = parseexpr(p);
expect(p, TK_RPAREN);
rng->body = parseblock(p);
(void)ip;
return parse_for_else(p, rng);
}
}
@@ -1163,7 +1153,7 @@ parsestmt(Parser *p)
return b;
}
case TK_LET:
case TK_CONST: return parselet(p, 0);
case TK_CONST: return parselet(p);
case TK_IF: {
Node *n = parseif(p);
expect(p, TK_SEMI);
@@ -1510,7 +1500,7 @@ parsefile(Parser *p)
case TK_TYPE: d = parsetypedecl(p, exp); break;
case TK_FN: d = parsefn(p, exp, attrs); break;
case TK_LET:
case TK_CONST: d = parselet(p, 1); d->export = exp; break;
case TK_CONST: d = parselet(p); d->export = exp; break;
default:
errorf(p->cur.pos, "expected top-level decl, got %s",
tokname(p->cur.kind));