@@ -36,48 +36,48 @@ crate fn cfg_eval(ecx: &ExtCtxt<'_>, annotatable: Annotatable) -> Annotatable {
36
36
} ,
37
37
}
38
38
. 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 ( )
39
42
}
40
43
41
44
struct CfgEval < ' a , ' b > {
42
45
cfg : & ' a mut StripUnconfigured < ' b > ,
43
46
}
44
47
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 > {
48
52
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 ) ,
50
54
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 )
52
56
}
53
57
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 )
55
59
}
56
60
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 )
58
62
}
59
63
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 )
61
65
}
62
- Annotatable :: Expr ( mut expr) => Annotatable :: Expr ( {
66
+ Annotatable :: Expr ( mut expr) => {
63
67
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) )
69
69
}
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 )
72
73
}
74
+ Annotatable :: PatField ( fp) => vis. flat_map_pat_field ( fp) . pop ( ) . map ( Annotatable :: PatField ) ,
73
75
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 )
79
77
}
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 ) ,
81
81
}
82
82
}
83
83
@@ -122,11 +122,11 @@ impl CfgEval<'_, '_> {
122
122
self . cfg . configure ( node)
123
123
}
124
124
125
- pub fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Annotatable {
125
+ fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Option < Annotatable > {
126
126
// Tokenizing and re-parsing the `Annotatable` can have a significant
127
127
// performance impact, so try to avoid it if possible
128
128
if !CfgFinder :: has_cfg_or_cfg_attr ( & annotatable) {
129
- return annotatable;
129
+ return Some ( annotatable) ;
130
130
}
131
131
132
132
// The majority of parsed attribute targets will never need to have early cfg-expansion
0 commit comments