about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFelix S. Klock II <pnkfelix@pnkfx.org>2013-08-26 11:49:24 +0200
committerFelix S. Klock II <pnkfelix@pnkfx.org>2013-08-26 11:49:24 +0200
commitdf6644104e689900d49b5709da295dc4cba9485f (patch)
tree43973921c670c5166e0e7b8410a31c3bac561555
parentda88f69f06fc94ff0dcc09e40ccfe44e0a7747da (diff)
downloadrust-df6644104e689900d49b5709da295dc4cba9485f.tar.gz
rust-df6644104e689900d49b5709da295dc4cba9485f.zip
Port typeck/check/vtable.rs from oldvisit to <V:Visitor> trait API.
-rw-r--r--src/librustc/middle/typeck/check/vtable.rs29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/librustc/middle/typeck/check/vtable.rs b/src/librustc/middle/typeck/check/vtable.rs
index cd69a642b72..715c25c4a19 100644
--- a/src/librustc/middle/typeck/check/vtable.rs
+++ b/src/librustc/middle/typeck/check/vtable.rs
@@ -29,7 +29,8 @@ use syntax::ast;
 use syntax::ast_util;
 use syntax::codemap::span;
 use syntax::print::pprust::expr_to_str;
-use syntax::oldvisit;
+use syntax::visit;
+use syntax::visit::Visitor;
 
 // vtable resolution looks for places where trait bounds are
 // substituted in and figures out which vtable is used. There is some
@@ -712,11 +713,11 @@ pub fn early_resolve_expr(ex: @ast::expr,
     }
 }
 
-fn resolve_expr(ex: @ast::expr,
-                (fcx, v): (@mut FnCtxt,
-                           oldvisit::vt<@mut FnCtxt>)) {
+fn resolve_expr(v: &mut VtableResolveVisitor,
+                ex: @ast::expr,
+                fcx: @mut FnCtxt) {
     early_resolve_expr(ex, fcx, false);
-    oldvisit::visit_expr(ex, (fcx, v));
+    visit::walk_expr(v, ex, fcx);
 }
 
 pub fn resolve_impl(ccx: @mut CrateCtxt, impl_item: @ast::item) {
@@ -763,12 +764,20 @@ pub fn resolve_impl(ccx: @mut CrateCtxt, impl_item: @ast::item) {
     }
 }
 
+struct VtableResolveVisitor;
+
+impl visit::Visitor<@mut FnCtxt> for VtableResolveVisitor {
+    fn visit_expr(&mut self, ex:@ast::expr, e:@mut FnCtxt) {
+        resolve_expr(self, ex, e);
+    }
+    fn visit_item(&mut self, _:@ast::item, _:@mut FnCtxt) {
+        // no-op
+    }
+}
+
 // Detect points where a trait-bounded type parameter is
 // instantiated, resolve the impls for the parameters.
 pub fn resolve_in_block(fcx: @mut FnCtxt, bl: &ast::Block) {
-    oldvisit::visit_block(bl, (fcx, oldvisit::mk_vt(@oldvisit::Visitor {
-        visit_expr: resolve_expr,
-        visit_item: |_,_| {},
-        .. *oldvisit::default_visitor()
-    })));
+    let mut visitor = VtableResolveVisitor;
+    visit::walk_block(&mut visitor, bl, fcx);
 }