@@ -2905,35 +2905,30 @@ impl<'a> LoweringContext<'a> {
2905
2905
) ,
2906
2906
TraitItemKind :: Method ( ref sig, None ) => {
2907
2907
let names = self . lower_fn_args_to_names ( & sig. decl ) ;
2908
- self . add_in_band_defs (
2908
+ let ( generics , sig ) = self . lower_method_sig (
2909
2909
& i. generics ,
2910
+ sig,
2910
2911
trait_item_def_id,
2911
- AnonymousLifetimeMode :: PassThrough ,
2912
- |this| {
2913
- hir:: TraitItemKind :: Method (
2914
- this. lower_method_sig ( sig, trait_item_def_id, false , None ) ,
2915
- hir:: TraitMethod :: Required ( names) ,
2916
- )
2917
- } ,
2918
- )
2912
+ false ,
2913
+ None ,
2914
+ ) ;
2915
+ ( generics, hir:: TraitItemKind :: Method ( sig, hir:: TraitMethod :: Required ( names) ) )
2919
2916
}
2920
2917
TraitItemKind :: Method ( ref sig, Some ( ref body) ) => {
2921
2918
let body_id = self . lower_body ( Some ( & sig. decl ) , |this| {
2922
2919
let body = this. lower_block ( body, false ) ;
2923
2920
this. expr_block ( body, ThinVec :: new ( ) )
2924
2921
} ) ;
2925
2922
2926
- self . add_in_band_defs (
2923
+ let ( generics , sig ) = self . lower_method_sig (
2927
2924
& i. generics ,
2925
+ sig,
2928
2926
trait_item_def_id,
2929
- AnonymousLifetimeMode :: PassThrough ,
2930
- |this| {
2931
- hir:: TraitItemKind :: Method (
2932
- this. lower_method_sig ( sig, trait_item_def_id, false , None ) ,
2933
- hir:: TraitMethod :: Provided ( body_id) ,
2934
- )
2935
- } ,
2936
- )
2927
+ false ,
2928
+ None ,
2929
+ ) ;
2930
+
2931
+ ( generics, hir:: TraitItemKind :: Method ( sig, hir:: TraitMethod :: Provided ( body_id) ) )
2937
2932
}
2938
2933
TraitItemKind :: Type ( ref bounds, ref default) => (
2939
2934
self . lower_generics ( & i. generics , ImplTraitContext :: Disallowed ) ,
@@ -3001,23 +2996,14 @@ impl<'a> LoweringContext<'a> {
3001
2996
ImplItemKind :: Method ( ref sig, ref body) => {
3002
2997
let body_id = self . lower_async_body ( & sig. decl , sig. header . asyncness , body) ;
3003
2998
let impl_trait_return_allow = !self . is_in_trait_impl ;
3004
-
3005
- self . add_in_band_defs (
2999
+ let ( generics, sig) = self . lower_method_sig (
3006
3000
& i. generics ,
3001
+ sig,
3007
3002
impl_item_def_id,
3008
- AnonymousLifetimeMode :: PassThrough ,
3009
- |this| {
3010
- hir:: ImplItemKind :: Method (
3011
- this. lower_method_sig (
3012
- sig,
3013
- impl_item_def_id,
3014
- impl_trait_return_allow,
3015
- sig. header . asyncness . opt_return_id ( ) ,
3016
- ) ,
3017
- body_id,
3018
- )
3019
- } ,
3020
- )
3003
+ impl_trait_return_allow,
3004
+ sig. header . asyncness . opt_return_id ( ) ,
3005
+ ) ;
3006
+ ( generics, hir:: ImplItemKind :: Method ( sig, body_id) )
3021
3007
}
3022
3008
ImplItemKind :: Type ( ref ty) => (
3023
3009
self . lower_generics ( & i. generics , ImplTraitContext :: Disallowed ) ,
@@ -3231,15 +3217,20 @@ impl<'a> LoweringContext<'a> {
3231
3217
3232
3218
fn lower_method_sig (
3233
3219
& mut self ,
3220
+ generics : & Generics ,
3234
3221
sig : & MethodSig ,
3235
3222
fn_def_id : DefId ,
3236
3223
impl_trait_return_allow : bool ,
3237
3224
is_async : Option < NodeId > ,
3238
- ) -> hir:: MethodSig {
3239
- hir:: MethodSig {
3240
- header : self . lower_fn_header ( sig. header ) ,
3241
- decl : self . lower_fn_decl ( & sig. decl , Some ( fn_def_id) , impl_trait_return_allow, is_async) ,
3242
- }
3225
+ ) -> ( hir:: Generics , hir:: MethodSig ) {
3226
+ let header = self . lower_fn_header ( sig. header ) ;
3227
+ let ( generics, decl) = self . add_in_band_defs (
3228
+ generics,
3229
+ fn_def_id,
3230
+ AnonymousLifetimeMode :: PassThrough ,
3231
+ |cx| cx. lower_fn_decl ( & sig. decl , Some ( fn_def_id) , impl_trait_return_allow, is_async) ,
3232
+ ) ;
3233
+ ( generics, hir:: MethodSig { header, decl } )
3243
3234
}
3244
3235
3245
3236
fn lower_is_auto ( & mut self , a : IsAuto ) -> hir:: IsAuto {
0 commit comments