From c9afe78c0c8ad847504c50700a039df8d478de18 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 11 Oct 2010 18:20:25 -0700 Subject: Parse autos --- src/comp/front/parser.rs | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 877119de..f54c95dc 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -541,24 +541,26 @@ io fn parse_expr(parser p) -> @ast.expr { } } +io fn parse_initializer(parser p) -> option[@ast.expr] { + if (p.peek() == token.EQ) { + p.bump(); + ret some(parse_expr(p)); + } + + ret none[@ast.expr]; +} + io fn parse_let(parser p) -> @ast.decl { auto lo = p.get_span(); expect(p, token.LET); auto ty = parse_ty(p); auto id = parse_ident(p); + auto init = parse_initializer(p); - auto init; - if (p.peek() == token.EQ) { - p.bump(); - init = some(parse_expr(p)); - } else { - init = none[@ast.expr]; - } - + auto hi = p.get_span(); expect(p, token.SEMI); - auto hi = p.get_span(); ret @spanned(lo, hi, ast.decl_local(id, some(ty), init)); } @@ -580,6 +582,17 @@ io fn parse_stmt(parser p) -> @ast.stmt { ret @spanned(lo, hi, ast.stmt_decl(leht)); } + case (token.AUTO) { + p.bump(); + auto id = parse_ident(p); + auto init = parse_initializer(p); + auto hi = p.get_span(); + expect(p, token.SEMI); + + auto decl = ast.decl_local(id, none[@ast.ty], init); + ret @spanned(lo, hi, ast.stmt_decl(@spanned(lo, hi, decl))); + } + // Handle the (few) block-expr stmts first. case (token.IF) { -- cgit v1.2.3