aboutsummaryrefslogtreecommitdiff
path: root/src/comp/middle
diff options
context:
space:
mode:
authorMarijn Haverbeke <[email protected]>2011-05-11 15:26:36 +0200
committerMarijn Haverbeke <[email protected]>2011-05-11 15:26:36 +0200
commitfe29d24b6e795b3149e710659d12a8c9972bed96 (patch)
tree12a1def74085ffe7104575f3ce56b1f6245f9bb2 /src/comp/middle
parentGet rid of block indices (diff)
downloadrust-fe29d24b6e795b3149e710659d12a8c9972bed96.tar.xz
rust-fe29d24b6e795b3149e710659d12a8c9972bed96.zip
Get rid of arm indices
Diffstat (limited to 'src/comp/middle')
-rw-r--r--src/comp/middle/fold.rs2
-rw-r--r--src/comp/middle/resolve.rs25
-rw-r--r--src/comp/middle/typeck.rs5
-rw-r--r--src/comp/middle/typestate_check.rs3
4 files changed, 23 insertions, 12 deletions
diff --git a/src/comp/middle/fold.rs b/src/comp/middle/fold.rs
index bf85297f..c55858b8 100644
--- a/src/comp/middle/fold.rs
+++ b/src/comp/middle/fold.rs
@@ -892,7 +892,7 @@ fn fold_arm[ENV](&ENV env, &ast_fold[ENV] fld, &arm a) -> arm {
let ENV env_ = fld.update_env_for_arm(env, a);
auto ppat = fold_pat(env_, fld, a.pat);
auto bblock = fold_block(env_, fld, a.block);
- ret rec(pat=ppat, block=bblock, index=a.index);
+ ret rec(pat=ppat, block=bblock);
}
fn fold_arg[ENV](&ENV env, &ast_fold[ENV] fld, &arg a) -> arg {
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) {
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs
index fca0ab23..7d04e841 100644
--- a/src/comp/middle/typeck.rs
+++ b/src/comp/middle/typeck.rs
@@ -1463,8 +1463,7 @@ mod Pushdown {
auto block_1 = pushdown_block(fcx, expected, arm_0.block);
t = Demand.simple(fcx, e.span, t,
block_ty(fcx.ccx.tcx, block_1));
- auto arm_1 = rec(pat=arm_0.pat, block=block_1,
- index=arm_0.index);
+ auto arm_1 = rec(pat=arm_0.pat, block=block_1);
arms_1 += vec(arm_1);
}
e_1 = ast.expr_alt(discrim, arms_1, triv_ann(t));
@@ -2266,7 +2265,7 @@ fn check_expr(&@fn_ctxt fcx, &@ast.expr expr) -> @ast.expr {
block_0);
auto pat_1 = pats_1.(i);
auto arm = arms.(i);
- auto arm_1 = rec(pat=pat_1, block=block_1, index=arm.index);
+ auto arm_1 = rec(pat=pat_1, block=block_1);
arms_1 += vec(arm_1);
i += 1u;
}
diff --git a/src/comp/middle/typestate_check.rs b/src/comp/middle/typestate_check.rs
index d4e2e8c6..1925dd15 100644
--- a/src/comp/middle/typestate_check.rs
+++ b/src/comp/middle/typestate_check.rs
@@ -2184,8 +2184,7 @@ fn annotate_decl(&fn_info_map fm, &@decl d) -> @decl {
fn annotate_alts(&fn_info_map fm, &vec[arm] alts) -> vec[arm] {
fn one(fn_info_map fm, &arm a) -> arm {
ret rec(pat=a.pat,
- block=annotate_block(fm, a.block),
- index=a.index);
+ block=annotate_block(fm, a.block));
}
auto f = bind one(fm,_);
ret Vec.map[arm, arm](f, alts);