@@ -787,15 +787,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
787
787
} )
788
788
}
789
789
790
- /// Register a binder to be ignored for lifetime capture.
791
- #[ tracing:: instrument( level = "debug" , skip( self , f) ) ]
790
+ /// Lowers a lifetime binder that defines `generic_params`, returning the corresponding HIR
791
+ /// nodes. The returned list includes any "extra" lifetime parameters that were added by the
792
+ /// name resolver owing to lifetime elision; this also populates the resolver's node-id->def-id
793
+ /// map, so that later calls to `opt_node_id_to_def_id` that refer to these extra lifetime
794
+ /// parameters will be successful.
795
+ #[ tracing:: instrument( level = "debug" , skip( self ) ) ]
792
796
#[ inline]
793
- fn with_lifetime_binder < T > (
797
+ fn lower_lifetime_binder (
794
798
& mut self ,
795
799
binder : NodeId ,
796
800
generic_params : & [ GenericParam ] ,
797
- f : impl FnOnce ( & mut Self , & ' hir [ hir:: GenericParam < ' hir > ] ) -> T ,
798
- ) -> T {
801
+ ) -> & ' hir [ hir:: GenericParam < ' hir > ] {
799
802
let mut generic_params: Vec < _ > = self . lower_generic_params_mut ( generic_params) . collect ( ) ;
800
803
let extra_lifetimes = self . resolver . take_extra_lifetime_params ( binder) ;
801
804
debug ! ( ?extra_lifetimes) ;
@@ -805,7 +808,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
805
808
let generic_params = self . arena . alloc_from_iter ( generic_params) ;
806
809
debug ! ( ?generic_params) ;
807
810
808
- f ( self , generic_params)
811
+ generic_params
809
812
}
810
813
811
814
fn with_dyn_type_scope < T > ( & mut self , in_scope : bool , f : impl FnOnce ( & mut Self ) -> T ) -> T {
@@ -1226,15 +1229,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
1226
1229
hir:: TyKind :: Rptr ( lifetime, self . lower_mt ( mt, itctx) )
1227
1230
}
1228
1231
TyKind :: BareFn ( ref f) => {
1229
- self . with_lifetime_binder ( t. id , & f. generic_params , |this, generic_params| {
1230
- hir:: TyKind :: BareFn ( this. arena . alloc ( hir:: BareFnTy {
1231
- generic_params,
1232
- unsafety : this. lower_unsafety ( f. unsafety ) ,
1233
- abi : this. lower_extern ( f. ext ) ,
1234
- decl : this. lower_fn_decl ( & f. decl , None , FnDeclKind :: Pointer , None ) ,
1235
- param_names : this. lower_fn_params_to_names ( & f. decl ) ,
1236
- } ) )
1237
- } )
1232
+ let generic_params = self . lower_lifetime_binder ( t. id , & f. generic_params ) ;
1233
+ hir:: TyKind :: BareFn ( self . arena . alloc ( hir:: BareFnTy {
1234
+ generic_params,
1235
+ unsafety : self . lower_unsafety ( f. unsafety ) ,
1236
+ abi : self . lower_extern ( f. ext ) ,
1237
+ decl : self . lower_fn_decl ( & f. decl , None , FnDeclKind :: Pointer , None ) ,
1238
+ param_names : self . lower_fn_params_to_names ( & f. decl ) ,
1239
+ } ) )
1238
1240
}
1239
1241
TyKind :: Never => hir:: TyKind :: Never ,
1240
1242
TyKind :: Tup ( ref tys) => hir:: TyKind :: Tup (
@@ -2069,14 +2071,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2069
2071
p : & PolyTraitRef ,
2070
2072
itctx : ImplTraitContext ,
2071
2073
) -> hir:: PolyTraitRef < ' hir > {
2072
- self . with_lifetime_binder (
2073
- p. trait_ref . ref_id ,
2074
- & p. bound_generic_params ,
2075
- |this, bound_generic_params| {
2076
- let trait_ref = this. lower_trait_ref ( & p. trait_ref , itctx) ;
2077
- hir:: PolyTraitRef { bound_generic_params, trait_ref, span : this. lower_span ( p. span ) }
2078
- } ,
2079
- )
2074
+ let bound_generic_params =
2075
+ self . lower_lifetime_binder ( p. trait_ref . ref_id , & p. bound_generic_params ) ;
2076
+ let trait_ref = self . lower_trait_ref ( & p. trait_ref , itctx) ;
2077
+ hir:: PolyTraitRef { bound_generic_params, trait_ref, span : self . lower_span ( p. span ) }
2080
2078
}
2081
2079
2082
2080
fn lower_mt ( & mut self , mt : & MutTy , itctx : ImplTraitContext ) -> hir:: MutTy < ' hir > {
0 commit comments