aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/comp/front/parser.rs31
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) {