@@ -108,6 +108,17 @@ mod record_exports;
108
108
mod build_reduced_graph;
109
109
mod resolve_imports;
110
110
111
+ // Perform the callback, not walking deeper if the return is true
112
+ macro_rules! execute_callback {
113
+ ( $node: expr, $walker: expr) => (
114
+ if let Some ( ref callback) = $walker. callback {
115
+ if callback( $node, & mut $walker. resolved) {
116
+ return ;
117
+ }
118
+ }
119
+ )
120
+ }
121
+
111
122
pub enum ResolutionError < ' a > {
112
123
/// error E0401: can't use type parameters from outer function
113
124
TypeParametersFromOuterFunction ,
@@ -445,38 +456,22 @@ enum NameDefinition {
445
456
446
457
impl < ' a , ' v , ' tcx > Visitor < ' v > for Resolver < ' a , ' tcx > {
447
458
fn visit_item ( & mut self , item : & Item ) {
448
- if let Some ( ref callback) = self . callback {
449
- if callback ( ast_map:: Node :: NodeItem ( item) , & mut self . resolved ) {
450
- return ;
451
- }
452
- }
459
+ execute_callback ! ( ast_map:: Node :: NodeItem ( item) , self ) ;
453
460
self . resolve_item ( item) ;
454
461
}
455
462
fn visit_arm ( & mut self , arm : & Arm ) {
456
463
self . resolve_arm ( arm) ;
457
464
}
458
465
fn visit_block ( & mut self , block : & Block ) {
459
- if let Some ( ref callback) = self . callback {
460
- if callback ( ast_map:: Node :: NodeBlock ( block) , & mut self . resolved ) {
461
- return ;
462
- }
463
- }
466
+ execute_callback ! ( ast_map:: Node :: NodeBlock ( block) , self ) ;
464
467
self . resolve_block ( block) ;
465
468
}
466
469
fn visit_expr ( & mut self , expr : & Expr ) {
467
- if let Some ( ref callback) = self . callback {
468
- if callback ( ast_map:: Node :: NodeExpr ( expr) , & mut self . resolved ) {
469
- return ;
470
- }
471
- }
470
+ execute_callback ! ( ast_map:: Node :: NodeExpr ( expr) , self ) ;
472
471
self . resolve_expr ( expr) ;
473
472
}
474
473
fn visit_local ( & mut self , local : & Local ) {
475
- if let Some ( ref callback) = self . callback {
476
- if callback ( ast_map:: Node :: NodeLocal ( & * local. pat ) , & mut self . resolved ) {
477
- return ;
478
- }
479
- }
474
+ execute_callback ! ( ast_map:: Node :: NodeLocal ( & * local. pat) , self ) ;
480
475
self . resolve_local ( local) ;
481
476
}
482
477
fn visit_ty ( & mut self , ty : & Ty ) {
@@ -495,11 +490,7 @@ impl<'a, 'v, 'tcx> Visitor<'v> for Resolver<'a, 'tcx> {
495
490
visit:: walk_poly_trait_ref ( self , tref, m) ;
496
491
}
497
492
fn visit_variant ( & mut self , variant : & ast:: Variant , generics : & Generics ) {
498
- if let Some ( ref callback) = self . callback {
499
- if callback ( ast_map:: Node :: NodeVariant ( variant) , & mut self . resolved ) {
500
- return ;
501
- }
502
- }
493
+ execute_callback ! ( ast_map:: Node :: NodeVariant ( variant) , self ) ;
503
494
if let Some ( ref dis_expr) = variant. node . disr_expr {
504
495
// resolve the discriminator expr as a constant
505
496
self . with_constant_rib ( |this| {
@@ -523,11 +514,7 @@ impl<'a, 'v, 'tcx> Visitor<'v> for Resolver<'a, 'tcx> {
523
514
}
524
515
}
525
516
fn visit_foreign_item ( & mut self , foreign_item : & ast:: ForeignItem ) {
526
- if let Some ( ref callback) = self . callback {
527
- if callback ( ast_map:: Node :: NodeForeignItem ( foreign_item) , & mut self . resolved ) {
528
- return ;
529
- }
530
- }
517
+ execute_callback ! ( ast_map:: Node :: NodeForeignItem ( foreign_item) , self ) ;
531
518
let type_parameters = match foreign_item. node {
532
519
ForeignItemFn ( _, ref generics) => {
533
520
HasTypeParameters ( generics, FnSpace , ItemRibKind )
0 commit comments