@@ -1363,15 +1363,6 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1363
1363
debug ! ( "visit_expr {:?}" , ex. node) ;
1364
1364
self . process_macro_use ( ex. span , ex. id ) ;
1365
1365
match ex. node {
1366
- ast:: ExprKind :: Call ( ref _f, ref _args) => {
1367
- // Don't need to do anything for function calls,
1368
- // because just walking the callee path does what we want.
1369
- visit:: walk_expr ( self , ex) ;
1370
- }
1371
- ast:: ExprKind :: Path ( _, ref path) => {
1372
- self . process_path ( ex. id , path, None ) ;
1373
- visit:: walk_expr ( self , ex) ;
1374
- }
1375
1366
ast:: ExprKind :: Struct ( ref path, ref fields, ref base) => {
1376
1367
let hir_expr = self . save_ctxt . tcx . hir . expect_expr ( ex. id ) ;
1377
1368
let adt = match self . save_ctxt . tables . expr_ty_opt ( & hir_expr) {
@@ -1469,6 +1460,8 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1469
1460
self . visit_expr ( element) ;
1470
1461
self . nest_tables ( count. id , |v| v. visit_expr ( count) ) ;
1471
1462
}
1463
+ // In particular, we take this branch for call and path expressions,
1464
+ // where we'll index the idents involved just by continuing to walk.
1472
1465
_ => {
1473
1466
visit:: walk_expr ( self , ex)
1474
1467
}
@@ -1567,4 +1560,39 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll,
1567
1560
walk_list ! ( self , visit_ty, & l. ty) ;
1568
1561
walk_list ! ( self , visit_expr, & l. init) ;
1569
1562
}
1563
+
1564
+ fn visit_foreign_item ( & mut self , item : & ' l ast:: ForeignItem ) {
1565
+ match item. node {
1566
+ ast:: ForeignItemKind :: Fn ( ref decl, ref generics) => {
1567
+ if let Some ( fn_data) = self . save_ctxt . get_extern_item_data ( item) {
1568
+ down_cast_data ! ( fn_data, FunctionData , item. span) ;
1569
+ if !self . span . filter_generated ( Some ( fn_data. span ) , item. span ) {
1570
+ self . dumper . function ( fn_data. clone ( ) . lower ( self . tcx ) ) ;
1571
+ }
1572
+
1573
+ self . nest_tables ( item. id , |v| v. process_formals ( & decl. inputs ,
1574
+ & fn_data. qualname ) ) ;
1575
+ self . process_generic_params ( generics, item. span , & fn_data. qualname , item. id ) ;
1576
+ }
1577
+
1578
+ for arg in & decl. inputs {
1579
+ self . visit_ty ( & arg. ty ) ;
1580
+ }
1581
+
1582
+ if let ast:: FunctionRetTy :: Ty ( ref ret_ty) = decl. output {
1583
+ self . visit_ty ( & ret_ty) ;
1584
+ }
1585
+ }
1586
+ ast:: ForeignItemKind :: Static ( ref ty, _) => {
1587
+ if let Some ( var_data) = self . save_ctxt . get_extern_item_data ( item) {
1588
+ down_cast_data ! ( var_data, VariableData , item. span) ;
1589
+ if !self . span . filter_generated ( Some ( var_data. span ) , item. span ) {
1590
+ self . dumper . variable ( var_data. lower ( self . tcx ) ) ;
1591
+ }
1592
+ }
1593
+
1594
+ self . visit_ty ( ty) ;
1595
+ }
1596
+ }
1597
+ }
1570
1598
}
0 commit comments