diff options
Diffstat (limited to 'src/comp/front')
| -rw-r--r-- | src/comp/front/ast.rs | 4 | ||||
| -rw-r--r-- | src/comp/front/parser.rs | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index 11db3eed..eb41f859 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -44,11 +44,13 @@ type block_ = rec(vec[@stmt] stmts, option.t[@expr] expr, hashmap[ident,uint] index); +type variant_def = tup(def_id /* tag */, def_id /* variant */); + type pat = spanned[pat_]; tag pat_ { pat_wild(ann); pat_bind(ident, def_id, ann); - pat_tag(ident, vec[@pat], ann); + pat_tag(ident, vec[@pat], option.t[variant_def], ann); } tag mutability { diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index decb28e1..a3b0462d 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -906,7 +906,7 @@ impure fn parse_pat(parser p) -> @ast.pat { case (_) { args = vec(); } } - pat = ast.pat_tag(id, args, ast.ann_none); + pat = ast.pat_tag(id, args, none[ast.variant_def], ast.ann_none); } case (?tok) { p.err("expected pattern but found " + token.to_str(tok)); @@ -1088,7 +1088,7 @@ fn index_arm(@ast.pat pat) -> hashmap[ast.ident,ast.def_id] { alt (pat.node) { case (ast.pat_bind(?i, ?def_id, _)) { index.insert(i, def_id); } case (ast.pat_wild(_)) { /* empty */ } - case (ast.pat_tag(_, ?pats, _)) { + case (ast.pat_tag(_, ?pats, _, _)) { for (@ast.pat p in pats) { do_index_arm(index, p); } |