@@ -152,13 +152,13 @@ ast_fragments! {
152
152
Items ( SmallVec <[ P <ast:: Item >; 1 ] >) {
153
153
"item" ; many fn flat_map_item; fn visit_item; fn make_items;
154
154
}
155
- TraitItems ( SmallVec <[ ast:: AssocItem ; 1 ] >) {
155
+ TraitItems ( SmallVec <[ P < ast:: AssocItem > ; 1 ] >) {
156
156
"trait item" ; many fn flat_map_trait_item; fn visit_trait_item; fn make_trait_items;
157
157
}
158
- ImplItems ( SmallVec <[ ast:: AssocItem ; 1 ] >) {
158
+ ImplItems ( SmallVec <[ P < ast:: AssocItem > ; 1 ] >) {
159
159
"impl item" ; many fn flat_map_impl_item; fn visit_impl_item; fn make_impl_items;
160
160
}
161
- ForeignItems ( SmallVec <[ ast:: ForeignItem ; 1 ] >) {
161
+ ForeignItems ( SmallVec <[ P < ast:: ForeignItem > ; 1 ] >) {
162
162
"foreign item" ;
163
163
many fn flat_map_foreign_item;
164
164
fn visit_foreign_item;
@@ -554,15 +554,15 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
554
554
// we know that fold result vector will contain exactly one element
555
555
match item {
556
556
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
+ }
560
560
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 ( ) )
562
565
}
563
- Annotatable :: ForeignItem ( item) => Annotatable :: ForeignItem (
564
- item. map ( |item| cfg. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) ) ,
565
- ) ,
566
566
Annotatable :: Stmt ( stmt) => {
567
567
Annotatable :: Stmt ( stmt. map ( |stmt| cfg. flat_map_stmt ( stmt) . pop ( ) . unwrap ( ) ) )
568
568
}
@@ -643,11 +643,9 @@ impl<'a, 'b> MacroExpander<'a, 'b> {
643
643
let item_tok = TokenTree :: token (
644
644
token:: Interpolated ( Lrc :: new ( match item {
645
645
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) ,
651
649
Annotatable :: Stmt ( stmt) => token:: NtStmt ( stmt. into_inner ( ) ) ,
652
650
Annotatable :: Expr ( expr) => token:: NtExpr ( expr) ,
653
651
Annotatable :: Arm ( ..)
@@ -1411,7 +1409,7 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
1411
1409
}
1412
1410
}
1413
1411
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 ] > {
1415
1413
let mut item = configure ! ( self , item) ;
1416
1414
1417
1415
let ( attr, traits, after_derive) = self . classify_item ( & mut item) ;
@@ -1420,24 +1418,28 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
1420
1418
. collect_attr (
1421
1419
attr,
1422
1420
traits,
1423
- Annotatable :: TraitItem ( P ( item) ) ,
1421
+ Annotatable :: TraitItem ( item) ,
1424
1422
AstFragmentKind :: TraitItems ,
1425
1423
after_derive,
1426
1424
)
1427
1425
. make_trait_items ( ) ;
1428
1426
}
1429
1427
1430
1428
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
+ } )
1435
1437
}
1436
1438
_ => noop_flat_map_assoc_item ( item, self ) ,
1437
1439
}
1438
1440
}
1439
1441
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 ] > {
1441
1443
let mut item = configure ! ( self , item) ;
1442
1444
1443
1445
let ( attr, traits, after_derive) = self . classify_item ( & mut item) ;
@@ -1446,18 +1448,22 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
1446
1448
. collect_attr (
1447
1449
attr,
1448
1450
traits,
1449
- Annotatable :: ImplItem ( P ( item) ) ,
1451
+ Annotatable :: ImplItem ( item) ,
1450
1452
AstFragmentKind :: ImplItems ,
1451
1453
after_derive,
1452
1454
)
1453
1455
. make_impl_items ( ) ;
1454
1456
}
1455
1457
1456
1458
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
+ } )
1461
1467
}
1462
1468
_ => noop_flat_map_assoc_item ( item, self ) ,
1463
1469
}
@@ -1482,30 +1488,34 @@ impl<'a, 'b> MutVisitor for InvocationCollector<'a, 'b> {
1482
1488
1483
1489
fn flat_map_foreign_item (
1484
1490
& 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 ] > {
1487
1493
let ( attr, traits, after_derive) = self . classify_item ( & mut foreign_item) ;
1488
1494
1489
1495
if attr. is_some ( ) || !traits. is_empty ( ) {
1490
1496
return self
1491
1497
. collect_attr (
1492
1498
attr,
1493
1499
traits,
1494
- Annotatable :: ForeignItem ( P ( foreign_item) ) ,
1500
+ Annotatable :: ForeignItem ( foreign_item) ,
1495
1501
AstFragmentKind :: ForeignItems ,
1496
1502
after_derive,
1497
1503
)
1498
1504
. make_foreign_items ( ) ;
1499
1505
}
1500
1506
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 ) ,
1506
1518
}
1507
-
1508
- noop_flat_map_foreign_item ( foreign_item, self )
1509
1519
}
1510
1520
1511
1521
fn visit_item_kind ( & mut self , item : & mut ast:: ItemKind ) {
0 commit comments