@@ -29,7 +29,8 @@ use util::ppaux;
2929use syntax:: ast;
3030use syntax:: codemap:: Span ;
3131use syntax:: print:: pprust:: pat_to_str;
32- use syntax:: oldvisit;
32+ use syntax:: visit;
33+ use syntax:: visit:: Visitor ;
3334
3435fn 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
332332pub 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