aboutsummaryrefslogtreecommitdiff
path: root/src/comp/front
diff options
context:
space:
mode:
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/ast.rs10
-rw-r--r--src/comp/front/parser.rs7
2 files changed, 13 insertions, 4 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs
index 349f887a..0d70c993 100644
--- a/src/comp/front/ast.rs
+++ b/src/comp/front/ast.rs
@@ -194,10 +194,18 @@ tag stmt_ {
stmt_crate_directive(@crate_directive);
}
+tag init_op {
+ init_assign;
+ init_recv;
+}
+
+type initializer = rec(init_op op,
+ @expr expr);
+
type local = rec(option.t[@ty] ty,
bool infer,
ident ident,
- option.t[@expr] init,
+ option.t[initializer] init,
def_id id,
ann ann);
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs
index 063bc0e1..23b4a936 100644
--- a/src/comp/front/parser.rs
+++ b/src/comp/front/parser.rs
@@ -1364,13 +1364,14 @@ impure fn parse_expr_inner(parser p) -> @ast.expr {
}
}
-impure fn parse_initializer(parser p) -> option.t[@ast.expr] {
+impure fn parse_initializer(parser p) -> option.t[ast.initializer] {
if (p.peek() == token.EQ) {
p.bump();
- ret some(parse_expr(p));
+ ret some(rec(op = ast.init_assign,
+ expr = parse_expr(p)));
}
- ret none[@ast.expr];
+ ret none[ast.initializer];
}
impure fn parse_pat(parser p) -> @ast.pat {