Skip to content

Commit 241b8e3

Browse files
committed
---
yaml --- r: 4210 b: refs/heads/master c: c141718 h: refs/heads/master v: v3
1 parent f10249d commit 241b8e3

File tree

2 files changed

+36
-36
lines changed

2 files changed

+36
-36
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 757b7ec5343c75d720bce6104be9a6453711bade
2+
refs/heads/master: c141718952a97fa89433d5ff7c5ee17eeebd0081

trunk/src/comp/middle/typeck.rs

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,7 @@ mod writeback {
10991099
}
11001100
}
11011101
}
1102-
fn resolve_type_vars_for_node(wbcx: &@wb_ctxt, sp: &span,
1102+
fn resolve_type_vars_for_node(wbcx: &wb_ctxt, sp: &span,
11031103
id: ast::node_id) {
11041104
let fcx = wbcx.fcx;
11051105
let tpot = ty::node_id_to_ty_param_substs_opt_and_ty(fcx.ccx.tcx, id);
@@ -1126,24 +1126,33 @@ mod writeback {
11261126
}
11271127

11281128
type wb_ctxt =
1129-
// A flag to ignore contained items and lambdas
11301129
// As soon as we hit an error we have to stop resolving
11311130
// the entire function
1132-
{fcx: @fn_ctxt, mutable ignore: bool, mutable success: bool};
1131+
{fcx: @fn_ctxt, mutable success: bool};
1132+
type wb_vt = visit::vt[wb_ctxt];
11331133

1134-
fn visit_stmt_pre(wbcx: @wb_ctxt, s: &@ast::stmt) {
1134+
fn visit_stmt(s: &@ast::stmt, wbcx: &wb_ctxt, v: &wb_vt) {
1135+
if !wbcx.success { ret; }
11351136
resolve_type_vars_for_node(wbcx, s.span, ty::stmt_node_id(s));
1137+
visit::visit_stmt(s, wbcx, v);
11361138
}
1137-
fn visit_expr_pre(wbcx: @wb_ctxt, e: &@ast::expr) {
1139+
fn visit_expr(e: &@ast::expr, wbcx: &wb_ctxt, v: &wb_vt) {
1140+
if !wbcx.success { ret; }
11381141
resolve_type_vars_for_node(wbcx, e.span, e.id);
1142+
visit::visit_expr(e, wbcx, v);
11391143
}
1140-
fn visit_block_pre(wbcx: @wb_ctxt, b: &ast::blk) {
1144+
fn visit_block(b: &ast::blk, wbcx: &wb_ctxt, v: &wb_vt) {
1145+
if !wbcx.success { ret; }
11411146
resolve_type_vars_for_node(wbcx, b.span, b.node.id);
1147+
visit::visit_block(b, wbcx, v);
11421148
}
1143-
fn visit_pat_pre(wbcx: @wb_ctxt, p: &@ast::pat) {
1149+
fn visit_pat(p: &@ast::pat, wbcx: &wb_ctxt, v: &wb_vt) {
1150+
if !wbcx.success { ret; }
11441151
resolve_type_vars_for_node(wbcx, p.span, p.id);
1152+
visit::visit_pat(p, wbcx, v);
11451153
}
1146-
fn visit_local_pre(wbcx: @wb_ctxt, l: &@ast::local) {
1154+
fn visit_local(l: &@ast::local, wbcx: &wb_ctxt, v: &wb_vt) {
1155+
if !wbcx.success { ret; }
11471156
let var_id = lookup_local(wbcx.fcx, l.span, l.node.id);
11481157
let fix_rslt =
11491158
ty::unify::resolve_type_var(wbcx.fcx.ccx.tcx,
@@ -1157,38 +1166,29 @@ mod writeback {
11571166
wbcx.success = false;
11581167
}
11591168
}
1169+
visit::visit_local(l, wbcx, v);
11601170
}
1161-
fn visit_item_pre(wbcx: @wb_ctxt, item: &@ast::item) {
1162-
wbcx.ignore = true;
1171+
fn visit_item(item: &@ast::item, wbcx: &wb_ctxt, v: &wb_vt) {
1172+
// Ignore items
11631173
}
1164-
fn visit_item_post(wbcx: @wb_ctxt, item: &@ast::item) {
1165-
wbcx.ignore = false;
1174+
fn visit_fn(f: &ast::_fn, tps: &ast::ty_param[],
1175+
sp: &span, i: &ast::fn_ident, d: ast::node_id,
1176+
wbcx: &wb_ctxt, v: &wb_vt) {
1177+
// Ignore fns
11661178
}
1167-
fn visit_fn_pre(wbcx: @wb_ctxt, f: &ast::_fn, tps: &ast::ty_param[],
1168-
sp: &span, i: &ast::fn_ident, d: ast::node_id) {
1169-
wbcx.ignore = true;
1170-
}
1171-
fn visit_fn_post(wbcx: @wb_ctxt, f: &ast::_fn, tps: &ast::ty_param[],
1172-
sp: &span, i: &ast::fn_ident, d: ast::node_id) {
1173-
wbcx.ignore = false;
1174-
}
1175-
fn keep_going(wbcx: @wb_ctxt) -> bool { !wbcx.ignore && wbcx.success }
11761179

11771180
fn resolve_type_vars_in_block(fcx: &@fn_ctxt, blk: &ast::blk) -> bool {
1178-
let wbcx = @{fcx: fcx, mutable ignore: false, mutable success: true};
1179-
let visit =
1180-
{keep_going: bind keep_going(wbcx),
1181-
visit_item_pre: bind visit_item_pre(wbcx, _),
1182-
visit_item_post: bind visit_item_post(wbcx, _),
1183-
visit_fn_pre: bind visit_fn_pre(wbcx, _, _, _, _, _),
1184-
visit_fn_post: bind visit_fn_post(wbcx, _, _, _, _, _),
1185-
visit_stmt_pre: bind visit_stmt_pre(wbcx, _),
1186-
visit_expr_pre: bind visit_expr_pre(wbcx, _),
1187-
visit_block_pre: bind visit_block_pre(wbcx, _),
1188-
visit_pat_pre: bind visit_pat_pre(wbcx, _),
1189-
visit_local_pre: bind visit_local_pre(wbcx, _)
1190-
with walk::default_visitor()};
1191-
walk::walk_block(visit, blk);
1181+
let wbcx = {fcx: fcx, mutable success: true};
1182+
let visit = visit::mk_vt
1183+
(@{visit_item: visit_item,
1184+
visit_fn: visit_fn,
1185+
visit_stmt: visit_stmt,
1186+
visit_expr: visit_expr,
1187+
visit_block: visit_block,
1188+
visit_pat: visit_pat,
1189+
visit_local: visit_local
1190+
with *visit::default_visitor()});
1191+
visit::visit_block(blk, wbcx, visit);
11921192
ret wbcx.success;
11931193
}
11941194
}

0 commit comments

Comments
 (0)