@@ -39,46 +39,44 @@ pub(crate) fn cfg_eval(
3939let features = Some ( features) ;
4040CfgEval ( StripUnconfigured { sess, features, config_tokens : true , lint_node_id } )
4141. configure_annotatable ( annotatable)
42- // Since the item itself has already been configured by the `InvocationCollector`,
43- // we know that fold result vector will contain exactly one element.
44- . unwrap ( )
4542}
4643
4744struct CfgEval < ' a > ( StripUnconfigured < ' a > ) ;
4845
49- fn flat_map_annotatable (
50- vis : & mut impl MutVisitor ,
51- annotatable : Annotatable ,
52- ) -> Option < Annotatable > {
46+ fn flat_map_annotatable ( vis : & mut impl MutVisitor , annotatable : Annotatable ) -> Annotatable {
5347match annotatable {
54- Annotatable :: Item ( item) => vis. flat_map_item ( item) . pop ( ) . map ( Annotatable :: Item ) ,
48+ Annotatable :: Item ( item) => Annotatable :: Item ( vis. flat_map_item ( item) . pop ( ) . unwrap ( ) ) ,
5549Annotatable :: AssocItem ( item, ctxt) => {
56- Some ( Annotatable :: AssocItem ( vis. flat_map_assoc_item ( item, ctxt) . pop ( ) ? , ctxt) )
50+ Annotatable :: AssocItem ( vis. flat_map_assoc_item ( item, ctxt) . pop ( ) . unwrap ( ) , ctxt)
5751}
5852Annotatable :: ForeignItem ( item) => {
59- vis. flat_map_foreign_item ( item) . pop ( ) . map ( Annotatable :: ForeignItem )
53+ Annotatable :: ForeignItem ( vis. flat_map_foreign_item ( item) . pop ( ) . unwrap ( ) )
6054}
6155Annotatable :: Stmt ( stmt) => {
62- vis. flat_map_stmt ( stmt. into_inner ( ) ) . pop ( ) . map ( P ) . map ( Annotatable :: Stmt )
56+ Annotatable :: Stmt ( P ( vis. flat_map_stmt ( stmt. into_inner ( ) ) . pop ( ) . unwrap ( ) ) )
6357}
6458Annotatable :: Expr ( mut expr) => {
6559 vis. visit_expr ( & mut expr) ;
66- Some ( Annotatable :: Expr ( expr) )
60+ Annotatable :: Expr ( expr)
6761}
68- Annotatable :: Arm ( arm) => vis. flat_map_arm ( arm) . pop ( ) . map ( Annotatable :: Arm ) ,
62+ Annotatable :: Arm ( arm) => Annotatable :: Arm ( vis. flat_map_arm ( arm) . pop ( ) . unwrap ( ) ) ,
6963Annotatable :: ExprField ( field) => {
70- vis. flat_map_expr_field ( field) . pop ( ) . map ( Annotatable :: ExprField )
64+ Annotatable :: ExprField ( vis. flat_map_expr_field ( field) . pop ( ) . unwrap ( ) )
65+ }
66+ Annotatable :: PatField ( fp) => {
67+ Annotatable :: PatField ( vis. flat_map_pat_field ( fp) . pop ( ) . unwrap ( ) )
7168}
72- Annotatable :: PatField ( fp) => vis. flat_map_pat_field ( fp) . pop ( ) . map ( Annotatable :: PatField ) ,
7369Annotatable :: GenericParam ( param) => {
74- vis. flat_map_generic_param ( param) . pop ( ) . map ( Annotatable :: GenericParam )
70+ Annotatable :: GenericParam ( vis. flat_map_generic_param ( param) . pop ( ) . unwrap ( ) )
71+ }
72+ Annotatable :: Param ( param) => Annotatable :: Param ( vis. flat_map_param ( param) . pop ( ) . unwrap ( ) ) ,
73+ Annotatable :: FieldDef ( sf) => {
74+ Annotatable :: FieldDef ( vis. flat_map_field_def ( sf) . pop ( ) . unwrap ( ) )
7575}
76- Annotatable :: Param ( param) => vis. flat_map_param ( param) . pop ( ) . map ( Annotatable :: Param ) ,
77- Annotatable :: FieldDef ( sf) => vis. flat_map_field_def ( sf) . pop ( ) . map ( Annotatable :: FieldDef ) ,
78- Annotatable :: Variant ( v) => vis. flat_map_variant ( v) . pop ( ) . map ( Annotatable :: Variant ) ,
76+ Annotatable :: Variant ( v) => Annotatable :: Variant ( vis. flat_map_variant ( v) . pop ( ) . unwrap ( ) ) ,
7977Annotatable :: Crate ( mut krate) => {
8078 vis. visit_crate ( & mut krate) ;
81- Some ( Annotatable :: Crate ( krate) )
79+ Annotatable :: Crate ( krate)
8280}
8381}
8482}
@@ -123,11 +121,11 @@ impl CfgEval<'_> {
123121self . 0 . configure ( node)
124122}
125123
126- fn configure_annotatable ( & mut self , mut annotatable : Annotatable ) -> Option < Annotatable > {
124+ fn configure_annotatable ( mut self , mut annotatable : Annotatable ) -> Annotatable {
127125// Tokenizing and re-parsing the `Annotatable` can have a significant
128126// performance impact, so try to avoid it if possible
129127if !has_cfg_or_cfg_attr ( & annotatable) {
130- return Some ( annotatable) ;
128+ return annotatable;
131129}
132130
133131// The majority of parsed attribute targets will never need to have early cfg-expansion
@@ -197,13 +195,13 @@ impl CfgEval<'_> {
197195Ok ( a) => annotatable = a,
198196Err ( err) => {
199197 err. emit ( ) ;
200- return Some ( annotatable) ;
198+ return annotatable;
201199}
202200}
203201
204202// Now that we have our re-parsed `AttrTokenStream`, recursively configuring
205203// our attribute target will correctly configure the tokens as well.
206- flat_map_annotatable ( self , annotatable)
204+ flat_map_annotatable ( & mut self , annotatable)
207205}
208206}
209207
0 commit comments