diff options
| author | Patrick Walton <[email protected]> | 2010-10-11 18:20:25 -0700 |
|---|---|---|
| committer | Patrick Walton <[email protected]> | 2010-10-11 18:20:25 -0700 |
| commit | c9afe78c0c8ad847504c50700a039df8d478de18 (patch) | |
| tree | 6c939a5cfafbf725d64696f28247fc1ef412c9b4 /src/comp/front | |
| parent | rustc: Parse lets (diff) | |
| download | rust-c9afe78c0c8ad847504c50700a039df8d478de18.tar.xz rust-c9afe78c0c8ad847504c50700a039df8d478de18.zip | |
Parse autos
Diffstat (limited to 'src/comp/front')
| -rw-r--r-- | src/comp/front/parser.rs | 31 |
1 files changed, 22 insertions, 9 deletions
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) { |