@@ -152,13 +152,13 @@ ast_fragments! {
152152 Items ( SmallVec <[ P <ast:: Item >; 1 ] >) {
153153 "item" ; many fn flat_map_item; fn visit_item; fn make_items;
154154 }
155- TraitItems ( SmallVec <[ ast:: AssocItem ; 1 ] >) {
155+ TraitItems ( SmallVec <[ P < ast:: AssocItem > ; 1 ] >) {
156156 "trait item" ; many fn flat_map_trait_item; fn visit_trait_item; fn make_trait_items;
157157 }
158- ImplItems ( SmallVec <[ ast:: AssocItem ; 1 ] >) {
158+ ImplItems ( SmallVec <[ P < ast:: AssocItem > ; 1 ] >) {
159159 "impl item" ; many fn flat_map_impl_item; fn visit_impl_item; fn make_impl_items;
160160 }
161- ForeignItems ( SmallVec <[ ast:: ForeignItem ; 1 ] >) {
161+ ForeignItems ( SmallVec <[ P < ast:: ForeignItem > ; 1 ] >) {
162162 "foreign item" ;
163163 many fn flat_map_foreign_item;
164164 fn visit_foreign_item;
@@ -554,15 +554,15 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
554554 // we know that fold result vector will contain exactly one element
555555 match item {
556556 Annotatable :: Item ( item) => Annotatable :: Item ( cfg. flat_map_item ( item) . pop ( ) . unwrap ( ) ) ,
557- Annotatable :: TraitItem ( item) => Annotatable :: TraitItem (
558- item . map ( |item| cfg. flat_map_trait_item ( item) . pop ( ) . unwrap ( ) ) ,
559- ) ,
557+ Annotatable :: TraitItem ( item) => {
558+ Annotatable :: TraitItem ( cfg. flat_map_trait_item ( item) . pop ( ) . unwrap ( ) )
559+ }
560560 Annotatable :: ImplItem ( item) => {
561- Annotatable :: ImplItem ( item. map ( |item| cfg. flat_map_impl_item ( item) . pop ( ) . unwrap ( ) ) )
561+ Annotatable :: ImplItem ( cfg. flat_map_impl_item ( item) . pop ( ) . unwrap ( ) )
562+ }
563+ Annotatable :: ForeignItem ( item) => {
564+ Annotatable :: ForeignItem ( cfg. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) )
562565 }
563- Annotatable :: ForeignItem ( item) => Annotatable :: ForeignItem (
564- item. map ( |item| cfg. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) ) ,
565- ) ,
566566 Annotatable :: Stmt ( stmt) => {
567567 Annotatable :: Stmt ( stmt. map ( |stmt| cfg. flat_map_stmt ( stmt) . pop ( ) . unwrap ( ) ) )
568568 }
@@ -643,11 +643,9 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
643643 let item_tok = TokenTree :: token (
644644 token:: Interpolated ( Lrc :: new ( match item {
645645 Annotatable :: Item ( item) => token:: NtItem ( item) ,
646- Annotatable :: TraitItem ( item) => token:: NtTraitItem ( item. into_inner ( ) ) ,
647- Annotatable :: ImplItem ( item) => token:: NtImplItem ( item. into_inner ( ) ) ,
648- Annotatable :: ForeignItem ( item) => {
649- token:: NtForeignItem ( item. into_inner ( ) )
650- }
646+ Annotatable :: TraitItem ( item) => token:: NtTraitItem ( item) ,
647+ Annotatable :: ImplItem ( item) => token:: NtImplItem ( item) ,
648+ Annotatable :: ForeignItem ( item) => token:: NtForeignItem ( item) ,
651649 Annotatable :: Stmt ( stmt) => token:: NtStmt ( stmt. into_inner ( ) ) ,
652650 Annotatable :: Expr ( expr) => token:: NtExpr ( expr) ,
653651 Annotatable :: Arm ( ..)
@@ -1411,7 +1409,7 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
14111409 }
14121410 }
14131411
1414- fn flat_map_trait_item ( & mut self , item : ast:: AssocItem ) -> SmallVec < [ ast:: AssocItem ; 1 ] > {
1412+ fn flat_map_trait_item ( & mut self , item : P < ast:: AssocItem > ) -> SmallVec < [ P < ast:: AssocItem > ; 1 ] > {
14151413 let mut item = configure ! ( self , item) ;
14161414
14171415 let ( attr, traits, after_derive) = self . classify_item ( & mut item) ;
@@ -1420,24 +1418,28 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
14201418 . collect_attr (
14211419 attr,
14221420 traits,
1423- Annotatable :: TraitItem ( P ( item) ) ,
1421+ Annotatable :: TraitItem ( item) ,
14241422 AstFragmentKind :: TraitItems ,
14251423 after_derive,
14261424 )
14271425 . make_trait_items ( ) ;
14281426 }
14291427
14301428 match item. kind {
1431- ast:: AssocItemKind :: Macro ( mac) => {
1432- let ast:: AssocItem { attrs, span, .. } = item;
1433- self . check_attributes ( & attrs) ;
1434- self . collect_bang ( mac, span, AstFragmentKind :: TraitItems ) . make_trait_items ( )
1429+ ast:: AssocItemKind :: Macro ( ..) => {
1430+ self . check_attributes ( & item. attrs ) ;
1431+ item. and_then ( |item| match item. kind {
1432+ ast:: AssocItemKind :: Macro ( mac) => self
1433+ . collect_bang ( mac, item. span , AstFragmentKind :: TraitItems )
1434+ . make_trait_items ( ) ,
1435+ _ => unreachable ! ( ) ,
1436+ } )
14351437 }
14361438 _ => noop_flat_map_assoc_item ( item, self ) ,
14371439 }
14381440 }
14391441
1440- fn flat_map_impl_item ( & mut self , item : ast:: AssocItem ) -> SmallVec < [ ast:: AssocItem ; 1 ] > {
1442+ fn flat_map_impl_item ( & mut self , item : P < ast:: AssocItem > ) -> SmallVec < [ P < ast:: AssocItem > ; 1 ] > {
14411443 let mut item = configure ! ( self , item) ;
14421444
14431445 let ( attr, traits, after_derive) = self . classify_item ( & mut item) ;
@@ -1446,18 +1448,22 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
14461448 . collect_attr (
14471449 attr,
14481450 traits,
1449- Annotatable :: ImplItem ( P ( item) ) ,
1451+ Annotatable :: ImplItem ( item) ,
14501452 AstFragmentKind :: ImplItems ,
14511453 after_derive,
14521454 )
14531455 . make_impl_items ( ) ;
14541456 }
14551457
14561458 match item. kind {
1457- ast:: AssocItemKind :: Macro ( mac) => {
1458- let ast:: AssocItem { attrs, span, .. } = item;
1459- self . check_attributes ( & attrs) ;
1460- self . collect_bang ( mac, span, AstFragmentKind :: ImplItems ) . make_impl_items ( )
1459+ ast:: AssocItemKind :: Macro ( ..) => {
1460+ self . check_attributes ( & item. attrs ) ;
1461+ item. and_then ( |item| match item. kind {
1462+ ast:: AssocItemKind :: Macro ( mac) => self
1463+ . collect_bang ( mac, item. span , AstFragmentKind :: ImplItems )
1464+ . make_impl_items ( ) ,
1465+ _ => unreachable ! ( ) ,
1466+ } )
14611467 }
14621468 _ => noop_flat_map_assoc_item ( item, self ) ,
14631469 }
@@ -1482,30 +1488,34 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
14821488
14831489 fn flat_map_foreign_item (
14841490 & mut self ,
1485- mut foreign_item : ast:: ForeignItem ,
1486- ) -> SmallVec < [ ast:: ForeignItem ; 1 ] > {
1491+ mut foreign_item : P < ast:: ForeignItem > ,
1492+ ) -> SmallVec < [ P < ast:: ForeignItem > ; 1 ] > {
14871493 let ( attr, traits, after_derive) = self . classify_item ( & mut foreign_item) ;
14881494
14891495 if attr. is_some ( ) || !traits. is_empty ( ) {
14901496 return self
14911497 . collect_attr (
14921498 attr,
14931499 traits,
1494- Annotatable :: ForeignItem ( P ( foreign_item) ) ,
1500+ Annotatable :: ForeignItem ( foreign_item) ,
14951501 AstFragmentKind :: ForeignItems ,
14961502 after_derive,
14971503 )
14981504 . make_foreign_items ( ) ;
14991505 }
15001506
1501- if let ast:: ForeignItemKind :: Macro ( mac) = foreign_item. kind {
1502- self . check_attributes ( & foreign_item. attrs ) ;
1503- return self
1504- . collect_bang ( mac, foreign_item. span , AstFragmentKind :: ForeignItems )
1505- . make_foreign_items ( ) ;
1507+ match foreign_item. kind {
1508+ ast:: ForeignItemKind :: Macro ( ..) => {
1509+ self . check_attributes ( & foreign_item. attrs ) ;
1510+ foreign_item. and_then ( |item| match item. kind {
1511+ ast:: ForeignItemKind :: Macro ( mac) => self
1512+ . collect_bang ( mac, item. span , AstFragmentKind :: ForeignItems )
1513+ . make_foreign_items ( ) ,
1514+ _ => unreachable ! ( ) ,
1515+ } )
1516+ }
1517+ _ => noop_flat_map_foreign_item ( foreign_item, self ) ,
15061518 }
1507-
1508- noop_flat_map_foreign_item ( foreign_item, self )
15091519 }
15101520
15111521 fn visit_item_kind ( & mut self , item : & mut ast:: ItemKind ) {
0 commit comments