wcc: delete parser backtracking remnants
This commit is contained in:
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user