@@ -36,48 +36,48 @@ crate fn cfg_eval(ecx: &ExtCtxt<'_>, annotatable: Annotatable) -> Annotatable {
3636 } ,
3737 }
3838 . configure_annotatable ( annotatable)
39+ // Since the item itself has already been configured by the `InvocationCollector`,
40+ // we know that fold result vector will contain exactly one element.
41+ . unwrap ( )
3942}
4043
4144struct CfgEval < ' a , ' b > {
4245 cfg : & ' a mut StripUnconfigured < ' b > ,
4346}
4447
45- fn flat_map_annotatable ( vis : & mut impl MutVisitor , annotatable : Annotatable ) -> Annotatable {
46- // Since the item itself has already been configured by the InvocationCollector,
47- // we know that fold result vector will contain exactly one element
48+ fn flat_map_annotatable (
49+ vis : & mut impl MutVisitor ,
50+ annotatable : Annotatable ,
51+ ) -> Option < Annotatable > {
4852 match annotatable {
49- Annotatable :: Item ( item) => Annotatable :: Item ( vis. flat_map_item ( item) . pop ( ) . unwrap ( ) ) ,
53+ Annotatable :: Item ( item) => vis. flat_map_item ( item) . pop ( ) . map ( Annotatable :: Item ) ,
5054 Annotatable :: TraitItem ( item) => {
51- Annotatable :: TraitItem ( vis. flat_map_trait_item ( item) . pop ( ) . unwrap ( ) )
55+ vis. flat_map_trait_item ( item) . pop ( ) . map ( Annotatable :: TraitItem )
5256 }
5357 Annotatable :: ImplItem ( item) => {
54- Annotatable :: ImplItem ( vis. flat_map_impl_item ( item) . pop ( ) . unwrap ( ) )
58+ vis. flat_map_impl_item ( item) . pop ( ) . map ( Annotatable :: ImplItem )
5559 }
5660 Annotatable :: ForeignItem ( item) => {
57- Annotatable :: ForeignItem ( vis. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) )
61+ vis. flat_map_foreign_item ( item) . pop ( ) . map ( Annotatable :: ForeignItem )
5862 }
5963 Annotatable :: Stmt ( stmt) => {
60- Annotatable :: Stmt ( stmt . map ( |stmt| vis. flat_map_stmt ( stmt) . pop ( ) . unwrap ( ) ) )
64+ vis. flat_map_stmt ( stmt. into_inner ( ) ) . pop ( ) . map ( P ) . map ( Annotatable :: Stmt )
6165 }
62- Annotatable :: Expr ( mut expr) => Annotatable :: Expr ( {
66+ Annotatable :: Expr ( mut expr) => {
6367 vis. visit_expr ( & mut expr) ;
64- expr
65- } ) ,
66- Annotatable :: Arm ( arm) => Annotatable :: Arm ( vis. flat_map_arm ( arm) . pop ( ) . unwrap ( ) ) ,
67- Annotatable :: ExprField ( field) => {
68- Annotatable :: ExprField ( vis. flat_map_expr_field ( field) . pop ( ) . unwrap ( ) )
68+ Some ( Annotatable :: Expr ( expr) )
6969 }
70- Annotatable :: PatField ( fp) => {
71- Annotatable :: PatField ( vis. flat_map_pat_field ( fp) . pop ( ) . unwrap ( ) )
70+ Annotatable :: Arm ( arm) => vis. flat_map_arm ( arm) . pop ( ) . map ( Annotatable :: Arm ) ,
71+ Annotatable :: ExprField ( field) => {
72+ vis. flat_map_expr_field ( field) . pop ( ) . map ( Annotatable :: ExprField )
7273 }
74+ Annotatable :: PatField ( fp) => vis. flat_map_pat_field ( fp) . pop ( ) . map ( Annotatable :: PatField ) ,
7375 Annotatable :: GenericParam ( param) => {
74- Annotatable :: GenericParam ( vis. flat_map_generic_param ( param) . pop ( ) . unwrap ( ) )
75- }
76- Annotatable :: Param ( param) => Annotatable :: Param ( vis. flat_map_param ( param) . pop ( ) . unwrap ( ) ) ,
77- Annotatable :: FieldDef ( sf) => {
78- Annotatable :: FieldDef ( vis. flat_map_field_def ( sf) . pop ( ) . unwrap ( ) )
76+ vis. flat_map_generic_param ( param) . pop ( ) . map ( Annotatable :: GenericParam )
7977 }
80- Annotatable :: Variant ( v) => Annotatable :: Variant ( vis. flat_map_variant ( v) . pop ( ) . unwrap ( ) ) ,
78+ Annotatable :: Param ( param) => vis. flat_map_param ( param) . pop ( ) . map ( Annotatable :: Param ) ,
79+ Annotatable :: FieldDef ( sf) => vis. flat_map_field_def ( sf) . pop ( ) . map ( Annotatable :: FieldDef ) ,
80+ Annotatable :: Variant ( v) => vis. flat_map_variant ( v) . pop ( ) . map ( Annotatable :: Variant ) ,
8181 }
8282}
8383
@@ -122,11 +122,11 @@ impl CfgEval<'_, '_> {
122122 self . cfg . configure ( node)
123123 }
124124
125- pub fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Annotatable {
125+ fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Option < Annotatable > {
126126 // Tokenizing and re-parsing the `Annotatable` can have a significant
127127 // performance impact, so try to avoid it if possible
128128 if !CfgFinder :: has_cfg_or_cfg_attr ( & annotatable) {
129- return annotatable;
129+ return Some ( annotatable) ;
130130 }
131131
132132 // The majority of parsed attribute targets will never need to have early cfg-expansion
0 commit comments