Skip to content

Commit c9afe78

Browse files
committed
Parse autos
1 parent 8a7a030 commit c9afe78

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

src/comp/front/parser.rs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -541,24 +541,26 @@ io fn parse_expr(parser p) -> @ast.expr {
541541
}
542542
}
543543

544+
io fn parse_initializer(parser p) -> option[@ast.expr] {
545+
if (p.peek() == token.EQ) {
546+
p.bump();
547+
ret some(parse_expr(p));
548+
}
549+
550+
ret none[@ast.expr];
551+
}
552+
544553
io fn parse_let(parser p) -> @ast.decl {
545554
auto lo = p.get_span();
546555

547556
expect(p, token.LET);
548557
auto ty = parse_ty(p);
549558
auto id = parse_ident(p);
559+
auto init = parse_initializer(p);
550560

551-
auto init;
552-
if (p.peek() == token.EQ) {
553-
p.bump();
554-
init = some(parse_expr(p));
555-
} else {
556-
init = none[@ast.expr];
557-
}
558-
561+
auto hi = p.get_span();
559562
expect(p, token.SEMI);
560563

561-
auto hi = p.get_span();
562564
ret @spanned(lo, hi, ast.decl_local(id, some(ty), init));
563565
}
564566

@@ -580,6 +582,17 @@ io fn parse_stmt(parser p) -> @ast.stmt {
580582
ret @spanned(lo, hi, ast.stmt_decl(leht));
581583
}
582584

585+
case (token.AUTO) {
586+
p.bump();
587+
auto id = parse_ident(p);
588+
auto init = parse_initializer(p);
589+
auto hi = p.get_span();
590+
expect(p, token.SEMI);
591+
592+
auto decl = ast.decl_local(id, none[@ast.ty], init);
593+
ret @spanned(lo, hi, ast.stmt_decl(@spanned(lo, hi, decl)));
594+
}
595+
583596
// Handle the (few) block-expr stmts first.
584597

585598
case (token.IF) {

0 commit comments

Comments
 (0)