diff options
| author | Marijn Haverbeke <[email protected]> | 2011-05-11 15:26:36 +0200 |
|---|---|---|
| committer | Marijn Haverbeke <[email protected]> | 2011-05-11 15:26:36 +0200 |
| commit | fe29d24b6e795b3149e710659d12a8c9972bed96 (patch) | |
| tree | 12a1def74085ffe7104575f3ce56b1f6245f9bb2 /src/comp/middle/resolve.rs | |
| parent | Get rid of block indices (diff) | |
| download | rust-fe29d24b6e795b3149e710659d12a8c9972bed96.tar.xz rust-fe29d24b6e795b3149e710659d12a8c9972bed96.zip | |
Get rid of arm indices
Diffstat (limited to 'src/comp/middle/resolve.rs')
| -rw-r--r-- | src/comp/middle/resolve.rs | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/comp/middle/resolve.rs b/src/comp/middle/resolve.rs index ee3288ac..b386c51a 100644 --- a/src/comp/middle/resolve.rs +++ b/src/comp/middle/resolve.rs @@ -431,12 +431,7 @@ fn lookup_in_scope(&env e, list[scope] sc, ident id, namespace ns) case (scope_arm(?a)) { if (ns == ns_value) { - alt (a.index.find(id)) { - case (some[def_id](?did)) { - ret some(ast.def_binding(did)); - } - case (_) {} - } + ret lookup_in_pat(id, *a.pat); } } } @@ -470,6 +465,24 @@ fn lookup_in_ty_params(ident id, &vec[ast.ty_param] ty_params) ret none[def]; } +fn lookup_in_pat(ident id, &ast.pat pat) -> Option.t[def] { + alt (pat.node) { + case (ast.pat_bind(?name, ?defid, _)) { + if (Str.eq(name, id)) { ret some(ast.def_binding(defid)); } + } + case (ast.pat_wild(_)) {} + case (ast.pat_lit(_, _)) {} + case (ast.pat_tag(_, ?pats, _, _)) { + for (@ast.pat p in pats) { + auto found = lookup_in_pat(id, *p); + if (found != none[def]) { ret found; } + } + } + } + ret none[def]; +} + + fn lookup_in_fn(ident id, &ast.fn_decl decl, &vec[ast.ty_param] ty_params, namespace ns) -> Option.t[def] { if (ns == ns_value) { |