diff options
| author | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-15 13:15:19 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <marijnh@gmail.com> | 2011-08-15 13:20:16 +0200 |
| commit | 3f127e397fdba5b982603aaab034f6e9aa0992bb (patch) | |
| tree | 07fc3b6fb6fc599b2ce38fa481c507ea612f9471 /src/comp/syntax/ast.rs | |
| parent | 1ee24d31e139683a93c6afa93689f5a4122341be (diff) | |
| download | rust-3f127e397fdba5b982603aaab034f6e9aa0992bb.tar.gz rust-3f127e397fdba5b982603aaab034f6e9aa0992bb.zip | |
Add tuple patterns
Diffstat (limited to 'src/comp/syntax/ast.rs')
| -rw-r--r-- | src/comp/syntax/ast.rs | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs index bedb2cad64d..d2ad2cd0f08 100644 --- a/src/comp/syntax/ast.rs +++ b/src/comp/syntax/ast.rs @@ -126,6 +126,7 @@ tag pat_ { pat_lit(@lit); pat_tag(path, [@pat]); pat_rec([field_pat], bool); + pat_tup([@pat]); pat_box(@pat); } @@ -135,18 +136,10 @@ type pat_id_map = std::map::hashmap[str, ast::node_id]; // use the node_id of their namesake in the first pattern. fn pat_id_map(pat: &@pat) -> pat_id_map { let map = std::map::new_str_hash[node_id](); - fn walk(map: &pat_id_map, pat: &@pat) { - alt pat.node { - pat_bind(name) { map.insert(name, pat.id); } - pat_tag(_, sub) { for p: @pat in sub { walk(map, p); } } - pat_rec(fields, _) { - for f: field_pat in fields { walk(map, f.pat); } - } - pat_box(inner) { walk(map, inner); } - _ { } - } + for each bound in pat_bindings(pat) { + let name = alt bound.node { pat_bind(n) { n } }; + map.insert(name, bound.id); } - walk(map, pat); ret map; } @@ -163,6 +156,11 @@ iter pat_bindings(pat: &@pat) -> @pat { for each b in pat_bindings(f.pat) { put b; } } } + pat_tup(elts) { + for elt in elts { + for each b in pat_bindings(elt) { put b; } + } + } pat_box(sub) { for each b in pat_bindings(sub) { put b; } } |
