@@ -525,29 +525,8 @@ pub fn walk_pat<'a, V: Visitor<'a>>(visitor: &mut V, pattern: &'a Pat) {
525525}
526526
527527pub fn walk_foreign_item < ' a , V : Visitor < ' a > > ( visitor : & mut V , item : & ' a ForeignItem ) {
528- visitor. visit_vis ( & item. vis ) ;
529- visitor. visit_ident ( item. ident ) ;
530-
531- match item. kind {
532- ForeignItemKind :: Fn ( ref sig, ref generics, ref body) => {
533- visitor. visit_generics ( generics) ;
534- let kind = FnKind :: Fn ( FnCtxt :: Foreign , item. ident , sig, & item. vis , body. as_deref ( ) ) ;
535- visitor. visit_fn ( kind, item. span , item. id ) ;
536- }
537- ForeignItemKind :: Const ( ref typ, ref body)
538- | ForeignItemKind :: Static ( ref typ, _, ref body) => {
539- visitor. visit_ty ( typ) ;
540- walk_list ! ( visitor, visit_expr, body) ;
541- }
542- ForeignItemKind :: TyAlias ( ref generics, ref bounds, ref ty) => {
543- visitor. visit_generics ( generics) ;
544- walk_list ! ( visitor, visit_param_bound, bounds) ;
545- walk_list ! ( visitor, visit_ty, ty) ;
546- }
547- ForeignItemKind :: Macro ( ref mac) => visitor. visit_mac ( mac) ,
548- }
549-
550- walk_list ! ( visitor, visit_attribute, & item. attrs) ;
528+ let ForeignItem { id, span, ident, vis, attrs, kind, tokens : _ } = item;
529+ walk_nested_item ( visitor, * id, * span, * ident, vis, attrs, kind, FnCtxt :: Foreign ) ;
551530}
552531
553532pub fn walk_global_asm < ' a , V : Visitor < ' a > > ( _: & mut V , _: & ' a GlobalAsm ) {
@@ -630,25 +609,39 @@ pub fn walk_fn<'a, V: Visitor<'a>>(visitor: &mut V, kind: FnKind<'a>, _span: Spa
630609}
631610
632611pub fn walk_assoc_item < ' a , V : Visitor < ' a > > ( visitor : & mut V , item : & ' a AssocItem , ctxt : AssocCtxt ) {
633- visitor. visit_vis ( & item. vis ) ;
634- visitor. visit_ident ( item. ident ) ;
635- walk_list ! ( visitor, visit_attribute, & item. attrs) ;
636- match item. kind {
637- AssocItemKind :: Const ( ref ty, ref expr) | AssocItemKind :: Static ( ref ty, _, ref expr) => {
612+ let AssocItem { id, span, ident, vis, attrs, kind, tokens : _, defaultness : _ } = item;
613+ walk_nested_item ( visitor, * id, * span, * ident, vis, attrs, kind, FnCtxt :: Assoc ( ctxt) ) ;
614+ }
615+
616+ fn walk_nested_item < ' a , V : Visitor < ' a > > (
617+ visitor : & mut V ,
618+ id : NodeId ,
619+ span : Span ,
620+ ident : Ident ,
621+ vis : & ' a Visibility ,
622+ attrs : & ' a [ Attribute ] ,
623+ kind : & ' a AssocItemKind ,
624+ ctxt : FnCtxt ,
625+ ) {
626+ visitor. visit_vis ( vis) ;
627+ visitor. visit_ident ( ident) ;
628+ walk_list ! ( visitor, visit_attribute, attrs) ;
629+ match kind {
630+ AssocItemKind :: Const ( ty, expr) | AssocItemKind :: Static ( ty, _, expr) => {
638631 visitor. visit_ty ( ty) ;
639632 walk_list ! ( visitor, visit_expr, expr) ;
640633 }
641- AssocItemKind :: Fn ( ref sig, ref generics, ref body) => {
634+ AssocItemKind :: Fn ( sig, generics, body) => {
642635 visitor. visit_generics ( generics) ;
643- let kind = FnKind :: Fn ( FnCtxt :: Assoc ( ctxt) , item . ident , sig, & item . vis , body. as_deref ( ) ) ;
644- visitor. visit_fn ( kind, item . span , item . id ) ;
636+ let kind = FnKind :: Fn ( ctxt, ident, sig, vis, body. as_deref ( ) ) ;
637+ visitor. visit_fn ( kind, span, id) ;
645638 }
646- AssocItemKind :: TyAlias ( ref generics, ref bounds, ref ty) => {
639+ AssocItemKind :: TyAlias ( generics, bounds, ty) => {
647640 visitor. visit_generics ( generics) ;
648641 walk_list ! ( visitor, visit_param_bound, bounds) ;
649642 walk_list ! ( visitor, visit_ty, ty) ;
650643 }
651- AssocItemKind :: Macro ( ref mac) => {
644+ AssocItemKind :: Macro ( mac) => {
652645 visitor. visit_mac ( mac) ;
653646 }
654647 }
0 commit comments