1
- use super :: { AnonymousLifetimeMode , LoweringContext , ParamMode } ;
2
1
use super :: { AstOwner , ImplTraitContext , ImplTraitPosition , ResolverAstLowering } ;
2
+ use super :: { LoweringContext , ParamMode } ;
3
3
use crate :: { Arena , FnDeclKind } ;
4
4
5
5
use rustc_ast:: ptr:: P ;
@@ -81,13 +81,13 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
81
81
is_in_loop_condition : false ,
82
82
is_in_trait_impl : false ,
83
83
is_in_dyn_type : false ,
84
- anonymous_lifetime_mode : AnonymousLifetimeMode :: PassThrough ,
85
84
generator_kind : None ,
86
85
task_context : None ,
87
86
current_item : None ,
88
- lifetimes_to_define : Vec :: new ( ) ,
87
+ lifetimes_to_define : Default :: default ( ) ,
89
88
is_collecting_anonymous_lifetimes : None ,
90
89
in_scope_lifetimes : Vec :: new ( ) ,
90
+ captured_lifetimes : None ,
91
91
allow_try_trait : Some ( [ sym:: try_trait_v2] [ ..] . into ( ) ) ,
92
92
allow_gen_future : Some ( [ sym:: gen_future] [ ..] . into ( ) ) ,
93
93
allow_into_future : Some ( [ sym:: into_future] [ ..] . into ( ) ) ,
@@ -143,12 +143,12 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
143
143
LocalDefId { local_def_index }
144
144
} ;
145
145
146
- let parent_hir = self . lower_node ( parent_id) . unwrap ( ) . node ( ) . expect_item ( ) ;
146
+ let parent_hir = self . lower_node ( parent_id) . unwrap ( ) ;
147
147
self . with_lctx ( item. id , |lctx| {
148
148
// Evaluate with the lifetimes in `params` in-scope.
149
149
// This is used to track which lifetimes have already been defined,
150
150
// and which need to be replicated when lowering an async fn.
151
- match parent_hir. kind {
151
+ match parent_hir. node ( ) . expect_item ( ) . kind {
152
152
hir:: ItemKind :: Impl ( hir:: Impl { ref of_trait, ref generics, .. } ) => {
153
153
lctx. is_in_trait_impl = of_trait. is_some ( ) ;
154
154
lctx. in_scope_lifetimes = generics
@@ -157,7 +157,12 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
157
157
. filter ( |param| {
158
158
matches ! ( param. kind, hir:: GenericParamKind :: Lifetime { .. } )
159
159
} )
160
- . map ( |param| param. name )
160
+ . map ( |param| {
161
+ let def_id =
162
+ parent_hir. nodes . local_id_to_def_id [ & param. hir_id . local_id ] ;
163
+ let name = param. name ;
164
+ ( name, def_id)
165
+ } )
161
166
. collect ( ) ;
162
167
}
163
168
hir:: ItemKind :: Trait ( _, _, ref generics, ..) => {
@@ -167,7 +172,12 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
167
172
. filter ( |param| {
168
173
matches ! ( param. kind, hir:: GenericParamKind :: Lifetime { .. } )
169
174
} )
170
- . map ( |param| param. name )
175
+ . map ( |param| {
176
+ let def_id =
177
+ parent_hir. nodes . local_id_to_def_id [ & param. hir_id . local_id ] ;
178
+ let name = param. name ;
179
+ ( name, def_id)
180
+ } )
171
181
. collect ( ) ;
172
182
}
173
183
_ => { }
@@ -288,20 +298,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
288
298
let body_id =
289
299
this. lower_maybe_async_body ( span, & decl, asyncness, body. as_deref ( ) ) ;
290
300
291
- let ( generics, decl) = this. add_in_band_defs (
292
- generics,
293
- fn_def_id,
294
- AnonymousLifetimeMode :: PassThrough ,
295
- |this, idty| {
301
+ let ( generics, decl) =
302
+ this. add_in_band_defs ( generics, fn_def_id, |this, idty| {
296
303
let ret_id = asyncness. opt_return_id ( ) ;
297
- this. lower_fn_decl (
298
- & decl,
299
- Some ( ( fn_def_id, idty) ) ,
300
- FnDeclKind :: Fn ,
301
- ret_id,
302
- )
303
- } ,
304
- ) ;
304
+ this. lower_fn_decl ( & decl, Some ( ( id, idty) ) , FnDeclKind :: Fn , ret_id)
305
+ } ) ;
305
306
let sig = hir:: FnSig {
306
307
decl,
307
308
header : this. lower_fn_header ( header) ,
@@ -420,11 +421,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
420
421
// lifetime to be added, but rather a reference to a
421
422
// parent lifetime.
422
423
let lowered_trait_def_id = hir_id. expect_owner ( ) ;
423
- let ( generics, ( trait_ref, lowered_ty) ) = self . add_in_band_defs (
424
- ast_generics,
425
- lowered_trait_def_id,
426
- AnonymousLifetimeMode :: CreateParameter ,
427
- |this, _| {
424
+ let ( generics, ( trait_ref, lowered_ty) ) =
425
+ self . add_in_band_defs ( ast_generics, lowered_trait_def_id, |this, _| {
428
426
let trait_ref = trait_ref. as_ref ( ) . map ( |trait_ref| {
429
427
this. lower_trait_ref (
430
428
trait_ref,
@@ -436,8 +434,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
436
434
. lower_ty ( ty, ImplTraitContext :: Disallowed ( ImplTraitPosition :: Type ) ) ;
437
435
438
436
( trait_ref, lowered_ty)
439
- } ,
440
- ) ;
437
+ } ) ;
441
438
442
439
let new_impl_items =
443
440
self . with_in_scope_lifetime_defs ( & ast_generics. params , |this| {
@@ -750,18 +747,14 @@ impl<'hir> LoweringContext<'_, 'hir> {
750
747
kind : match i. kind {
751
748
ForeignItemKind :: Fn ( box Fn { ref sig, ref generics, .. } ) => {
752
749
let fdec = & sig. decl ;
753
- let ( generics, ( fn_dec, fn_args) ) = self . add_in_band_defs (
754
- generics,
755
- def_id,
756
- AnonymousLifetimeMode :: PassThrough ,
757
- |this, _| {
750
+ let ( generics, ( fn_dec, fn_args) ) =
751
+ self . add_in_band_defs ( generics, def_id, |this, _| {
758
752
(
759
753
// Disallow `impl Trait` in foreign items.
760
754
this. lower_fn_decl ( fdec, None , FnDeclKind :: ExternFn , None ) ,
761
755
this. lower_fn_params_to_names ( fdec) ,
762
756
)
763
- } ,
764
- ) ;
757
+ } ) ;
765
758
766
759
hir:: ForeignItemKind :: Fn ( fn_dec, fn_args, generics)
767
760
}
@@ -868,13 +861,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
868
861
}
869
862
AssocItemKind :: Fn ( box Fn { ref sig, ref generics, body : None , .. } ) => {
870
863
let names = self . lower_fn_params_to_names ( & sig. decl ) ;
871
- let ( generics, sig) = self . lower_method_sig (
872
- generics,
873
- sig,
874
- trait_item_def_id,
875
- FnDeclKind :: Trait ,
876
- None ,
877
- ) ;
864
+ let ( generics, sig) =
865
+ self . lower_method_sig ( generics, sig, i. id , FnDeclKind :: Trait , None ) ;
878
866
( generics, hir:: TraitItemKind :: Fn ( sig, hir:: TraitFn :: Required ( names) ) )
879
867
}
880
868
AssocItemKind :: Fn ( box Fn { ref sig, ref generics, body : Some ( ref body) , .. } ) => {
@@ -884,7 +872,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
884
872
let ( generics, sig) = self . lower_method_sig (
885
873
generics,
886
874
sig,
887
- trait_item_def_id ,
875
+ i . id ,
888
876
FnDeclKind :: Trait ,
889
877
asyncness. opt_return_id ( ) ,
890
878
) ;
@@ -958,8 +946,6 @@ impl<'hir> LoweringContext<'_, 'hir> {
958
946
}
959
947
960
948
fn lower_impl_item ( & mut self , i : & AssocItem ) -> & ' hir hir:: ImplItem < ' hir > {
961
- let impl_item_def_id = self . resolver . local_def_id ( i. id ) ;
962
-
963
949
let ( generics, kind) = match & i. kind {
964
950
AssocItemKind :: Const ( _, ty, expr) => {
965
951
let ty = self . lower_ty ( ty, ImplTraitContext :: Disallowed ( ImplTraitPosition :: Type ) ) ;
@@ -976,7 +962,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
976
962
let ( generics, sig) = self . lower_method_sig (
977
963
generics,
978
964
sig,
979
- impl_item_def_id ,
965
+ i . id ,
980
966
if self . is_in_trait_impl { FnDeclKind :: Impl } else { FnDeclKind :: Inherent } ,
981
967
asyncness. opt_return_id ( ) ,
982
968
) ;
@@ -1363,17 +1349,15 @@ impl<'hir> LoweringContext<'_, 'hir> {
1363
1349
& mut self ,
1364
1350
generics : & Generics ,
1365
1351
sig : & FnSig ,
1366
- fn_def_id : LocalDefId ,
1352
+ id : NodeId ,
1367
1353
kind : FnDeclKind ,
1368
1354
is_async : Option < NodeId > ,
1369
1355
) -> ( hir:: Generics < ' hir > , hir:: FnSig < ' hir > ) {
1356
+ let fn_def_id = self . resolver . local_def_id ( id) ;
1370
1357
let header = self . lower_fn_header ( sig. header ) ;
1371
- let ( generics, decl) = self . add_in_band_defs (
1372
- generics,
1373
- fn_def_id,
1374
- AnonymousLifetimeMode :: PassThrough ,
1375
- |this, idty| this. lower_fn_decl ( & sig. decl , Some ( ( fn_def_id, idty) ) , kind, is_async) ,
1376
- ) ;
1358
+ let ( generics, decl) = self . add_in_band_defs ( generics, fn_def_id, |this, idty| {
1359
+ this. lower_fn_decl ( & sig. decl , Some ( ( id, idty) ) , kind, is_async)
1360
+ } ) ;
1377
1361
( generics, hir:: FnSig { header, decl, span : self . lower_span ( sig. span ) } )
1378
1362
}
1379
1363
@@ -1498,14 +1482,12 @@ impl<'hir> LoweringContext<'_, 'hir> {
1498
1482
}
1499
1483
1500
1484
fn lower_where_clause ( & mut self , wc : & WhereClause ) -> hir:: WhereClause < ' hir > {
1501
- self . with_anonymous_lifetime_mode ( AnonymousLifetimeMode :: ReportError , |this| {
1502
- hir:: WhereClause {
1503
- predicates : this. arena . alloc_from_iter (
1504
- wc. predicates . iter ( ) . map ( |predicate| this. lower_where_predicate ( predicate) ) ,
1505
- ) ,
1506
- span : this. lower_span ( wc. span ) ,
1507
- }
1508
- } )
1485
+ hir:: WhereClause {
1486
+ predicates : self . arena . alloc_from_iter (
1487
+ wc. predicates . iter ( ) . map ( |predicate| self . lower_where_predicate ( predicate) ) ,
1488
+ ) ,
1489
+ span : self . lower_span ( wc. span ) ,
1490
+ }
1509
1491
}
1510
1492
1511
1493
fn lower_where_predicate ( & mut self , pred : & WherePredicate ) -> hir:: WherePredicate < ' hir > {
0 commit comments