Skip to content

Commit af259a6

Browse files
committed
auto merge of rust-lang#9086 : pcwalton/rust/writeback-port, r=brson
r? @brson or @pnkfelix
2 parents d41b558 + 2a0dd97 commit af259a6

File tree

1 file changed

+26
-26
lines changed

1 file changed

+26
-26
lines changed

src/librustc/middle/typeck/check/writeback.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ use util::ppaux;
2929
use syntax::ast;
3030
use syntax::codemap::Span;
3131
use syntax::print::pprust::pat_to_str;
32-
use syntax::oldvisit;
32+
use syntax::visit;
33+
use syntax::visit::Visitor;
3334

3435
fn resolve_type_vars_in_type(fcx: @mut FnCtxt, sp: Span, typ: ty::t)
3536
-> Option<ty::t> {
@@ -214,15 +215,15 @@ struct WbCtxt {
214215
success: bool,
215216
}
216217

217-
type wb_vt = oldvisit::vt<@mut WbCtxt>;
218+
struct WbVisitor;
218219

219-
fn visit_stmt(s: @ast::Stmt, (wbcx, v): (@mut WbCtxt, wb_vt)) {
220+
fn visit_stmt(s: @ast::Stmt, (wbcx, v): (@mut WbCtxt, &mut WbVisitor)) {
220221
if !wbcx.success { return; }
221222
resolve_type_vars_for_node(wbcx, s.span, ty::stmt_node_id(s));
222-
oldvisit::visit_stmt(s, (wbcx, v));
223+
visit::walk_stmt(v, s, wbcx);
223224
}
224225

225-
fn visit_expr(e: @ast::Expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
226+
fn visit_expr(e: @ast::Expr, (wbcx, v): (@mut WbCtxt, &mut WbVisitor)) {
226227
if !wbcx.success {
227228
return;
228229
}
@@ -267,19 +268,19 @@ fn visit_expr(e: @ast::Expr, (wbcx, v): (@mut WbCtxt, wb_vt)) {
267268
_ => ()
268269
}
269270

270-
oldvisit::visit_expr(e, (wbcx, v));
271+
visit::walk_expr(v, e, wbcx);
271272
}
272273

273-
fn visit_block(b: &ast::Block, (wbcx, v): (@mut WbCtxt, wb_vt)) {
274+
fn visit_block(b: &ast::Block, (wbcx, v): (@mut WbCtxt, &mut WbVisitor)) {
274275
if !wbcx.success {
275276
return;
276277
}
277278

278279
resolve_type_vars_for_node(wbcx, b.span, b.id);
279-
oldvisit::visit_block(b, (wbcx, v));
280+
visit::walk_block(v, b, wbcx);
280281
}
281282

282-
fn visit_pat(p: @ast::Pat, (wbcx, v): (@mut WbCtxt, wb_vt)) {
283+
fn visit_pat(p: @ast::Pat, (wbcx, v): (@mut WbCtxt, &mut WbVisitor)) {
283284
if !wbcx.success {
284285
return;
285286
}
@@ -290,10 +291,10 @@ fn visit_pat(p: @ast::Pat, (wbcx, v): (@mut WbCtxt, wb_vt)) {
290291
wbcx.fcx.infcx().ty_to_str(
291292
ty::node_id_to_type(wbcx.fcx.ccx.tcx,
292293
p.id)));
293-
oldvisit::visit_pat(p, (wbcx, v));
294+
visit::walk_pat(v, p, wbcx);
294295
}
295296

296-
fn visit_local(l: @ast::Local, (wbcx, v): (@mut WbCtxt, wb_vt)) {
297+
fn visit_local(l: @ast::Local, (wbcx, v): (@mut WbCtxt, &mut WbVisitor)) {
297298
if !wbcx.success { return; }
298299
let var_ty = wbcx.fcx.local_ty(l.span, l.id);
299300
match resolve_type(wbcx.fcx.infcx(), var_ty, resolve_all | force_all) {
@@ -313,26 +314,25 @@ fn visit_local(l: @ast::Local, (wbcx, v): (@mut WbCtxt, wb_vt)) {
313314
wbcx.success = false;
314315
}
315316
}
316-
oldvisit::visit_local(l, (wbcx, v));
317+
visit::walk_local(v, l, wbcx);
317318
}
318-
fn visit_item(_item: @ast::item, (_wbcx, _v): (@mut WbCtxt, wb_vt)) {
319+
fn visit_item(_item: @ast::item, (_wbcx, _v): (@mut WbCtxt, &mut WbVisitor)) {
319320
// Ignore items
320321
}
321322

322-
fn mk_visitor() -> oldvisit::vt<@mut WbCtxt> {
323-
oldvisit::mk_vt(@oldvisit::Visitor {visit_item: visit_item,
324-
visit_stmt: visit_stmt,
325-
visit_expr: visit_expr,
326-
visit_block: visit_block,
327-
visit_pat: visit_pat,
328-
visit_local: visit_local,
329-
.. *oldvisit::default_visitor()})
323+
impl Visitor<@mut WbCtxt> for WbVisitor {
324+
fn visit_item(&mut self, i:@ast::item, e:@mut WbCtxt) { visit_item(i, (e, self)); }
325+
fn visit_stmt(&mut self, s:@ast::Stmt, e:@mut WbCtxt) { visit_stmt(s, (e, self)); }
326+
fn visit_expr(&mut self, ex:@ast::Expr, e:@mut WbCtxt) { visit_expr(ex, (e, self)); }
327+
fn visit_block(&mut self, b:&ast::Block, e:@mut WbCtxt) { visit_block(b, (e, self)); }
328+
fn visit_pat(&mut self, p:@ast::Pat, e:@mut WbCtxt) { visit_pat(p, (e, self)); }
329+
fn visit_local(&mut self, l:@ast::Local, e:@mut WbCtxt) { visit_local(l, (e, self)); }
330330
}
331331

332332
pub fn resolve_type_vars_in_expr(fcx: @mut FnCtxt, e: @ast::Expr) -> bool {
333333
let wbcx = @mut WbCtxt { fcx: fcx, success: true };
334-
let visit = mk_visitor();
335-
(visit.visit_expr)(e, (wbcx, visit));
334+
let mut visit = WbVisitor;
335+
visit.visit_expr(e, wbcx);
336336
return wbcx.success;
337337
}
338338

@@ -341,15 +341,15 @@ pub fn resolve_type_vars_in_fn(fcx: @mut FnCtxt,
341341
blk: &ast::Block,
342342
self_info: Option<SelfInfo>) -> bool {
343343
let wbcx = @mut WbCtxt { fcx: fcx, success: true };
344-
let visit = mk_visitor();
345-
(visit.visit_block)(blk, (wbcx, visit));
344+
let mut visit = WbVisitor;
345+
visit.visit_block(blk, wbcx);
346346
for self_info in self_info.iter() {
347347
resolve_type_vars_for_node(wbcx,
348348
self_info.span,
349349
self_info.self_id);
350350
}
351351
for arg in decl.inputs.iter() {
352-
(visit.visit_pat)(arg.pat, (wbcx, visit));
352+
visit.visit_pat(arg.pat, wbcx);
353353
// Privacy needs the type for the whole pattern, not just each binding
354354
if !pat_util::pat_is_binding(fcx.tcx().def_map, arg.pat) {
355355
resolve_type_vars_for_node(wbcx, arg.pat.span, arg.pat.id);

0 commit comments

Comments
 (0)