@@ -39,7 +39,7 @@ use crate::dep_graph::DepGraph;
39
39
use crate :: hir:: { self , ParamName } ;
40
40
use crate :: hir:: HirVec ;
41
41
use crate :: hir:: map:: { DefKey , DefPathData , Definitions } ;
42
- use crate :: hir:: def_id:: { DefId , DefIndex , CRATE_DEF_INDEX } ;
42
+ use crate :: hir:: def_id:: { DefId , CRATE_DEF_INDEX , LocalDefId } ;
43
43
use crate :: hir:: def:: { Namespace , Res , DefKind , PartialRes , PerNS } ;
44
44
use crate :: hir:: { GenericArg , ConstArg } ;
45
45
use crate :: hir:: ptr:: P ;
@@ -149,7 +149,7 @@ pub struct LoweringContext<'a> {
149
149
150
150
type_def_lifetime_params : DefIdMap < usize > ,
151
151
152
- current_hir_id_owner : Vec < ( DefIndex , u32 ) > ,
152
+ current_hir_id_owner : Vec < ( LocalDefId , u32 ) > ,
153
153
item_local_id_counters : NodeMap < u32 > ,
154
154
node_id_to_hir_id : IndexVec < NodeId , hir:: HirId > ,
155
155
@@ -273,7 +273,9 @@ pub fn lower_crate(
273
273
anonymous_lifetime_mode : AnonymousLifetimeMode :: PassThrough ,
274
274
type_def_lifetime_params : Default :: default ( ) ,
275
275
current_module : hir:: CRATE_HIR_ID ,
276
- current_hir_id_owner : vec ! [ ( CRATE_DEF_INDEX , 0 ) ] ,
276
+ current_hir_id_owner : vec ! [
277
+ ( LocalDefId { index: CRATE_DEF_INDEX } , 0 ) ,
278
+ ] ,
277
279
item_local_id_counters : Default :: default ( ) ,
278
280
node_id_to_hir_id : IndexVec :: new ( ) ,
279
281
generator_kind : None ,
@@ -397,13 +399,13 @@ impl<'a> LoweringContext<'a> {
397
399
fn allocate_use_tree_hir_id_counters (
398
400
& mut self ,
399
401
tree : & UseTree ,
400
- owner : DefIndex ,
402
+ owner : LocalDefId ,
401
403
) {
402
404
match tree. kind {
403
405
UseTreeKind :: Simple ( _, id1, id2) => {
404
406
for & id in & [ id1, id2] {
405
407
self . lctx . resolver . definitions ( ) . create_def_with_parent (
406
- owner,
408
+ owner. index ,
407
409
id,
408
410
DefPathData :: Misc ,
409
411
ExpnId :: root ( ) ,
@@ -416,7 +418,10 @@ impl<'a> LoweringContext<'a> {
416
418
UseTreeKind :: Nested ( ref trees) => {
417
419
for & ( ref use_tree, id) in trees {
418
420
let hir_id = self . lctx . allocate_hir_id_counter ( id) ;
419
- self . allocate_use_tree_hir_id_counters ( use_tree, hir_id. owner ) ;
421
+ self . allocate_use_tree_hir_id_counters (
422
+ use_tree,
423
+ hir_id. owner_local_def_id ( ) ,
424
+ ) ;
420
425
}
421
426
}
422
427
}
@@ -454,7 +459,8 @@ impl<'a> LoweringContext<'a> {
454
459
| ItemKind :: TyAlias ( _, ref generics)
455
460
| ItemKind :: OpaqueTy ( _, ref generics)
456
461
| ItemKind :: Trait ( _, _, ref generics, ..) => {
457
- let def_id = self . lctx . resolver . definitions ( ) . local_def_id ( item. id ) ;
462
+ let def_id = self . lctx . resolver . definitions ( ) . local_def_id ( item. id )
463
+ . assert_local ( ) ;
458
464
let count = generics
459
465
. params
460
466
. iter ( )
@@ -463,10 +469,13 @@ impl<'a> LoweringContext<'a> {
463
469
_ => false ,
464
470
} )
465
471
. count ( ) ;
466
- self . lctx . type_def_lifetime_params . insert ( def_id, count) ;
472
+ self . lctx . type_def_lifetime_params . insert ( def_id. to_def_id ( ) , count) ;
467
473
}
468
474
ItemKind :: Use ( ref use_tree) => {
469
- self . allocate_use_tree_hir_id_counters ( use_tree, hir_id. owner ) ;
475
+ self . allocate_use_tree_hir_id_counters (
476
+ use_tree,
477
+ hir_id. owner_local_def_id ( ) ,
478
+ ) ;
470
479
}
471
480
_ => { }
472
481
}
@@ -611,12 +620,12 @@ impl<'a> LoweringContext<'a> {
611
620
let counter = self . item_local_id_counters
612
621
. insert ( owner, HIR_ID_COUNTER_LOCKED )
613
622
. unwrap_or_else ( || panic ! ( "no `item_local_id_counters` entry for {:?}" , owner) ) ;
614
- let def_index = self . resolver . definitions ( ) . opt_def_index ( owner) . unwrap ( ) ;
615
- self . current_hir_id_owner . push ( ( def_index , counter) ) ;
623
+ let def_id = self . resolver . definitions ( ) . local_def_id ( owner) . assert_local ( ) ;
624
+ self . current_hir_id_owner . push ( ( def_id , counter) ) ;
616
625
let ret = f ( self ) ;
617
- let ( new_def_index , new_counter) = self . current_hir_id_owner . pop ( ) . unwrap ( ) ;
626
+ let ( new_def_id , new_counter) = self . current_hir_id_owner . pop ( ) . unwrap ( ) ;
618
627
619
- debug_assert ! ( def_index == new_def_index ) ;
628
+ debug_assert ! ( def_id == new_def_id ) ;
620
629
debug_assert ! ( new_counter >= counter) ;
621
630
622
631
let prev = self . item_local_id_counters
@@ -634,12 +643,12 @@ impl<'a> LoweringContext<'a> {
634
643
/// properly. Calling the method twice with the same `NodeId` is fine though.
635
644
fn lower_node_id ( & mut self , ast_node_id : NodeId ) -> hir:: HirId {
636
645
self . lower_node_id_generic ( ast_node_id, |this| {
637
- let & mut ( def_index , ref mut local_id_counter) =
646
+ let & mut ( def_id , ref mut local_id_counter) =
638
647
this. current_hir_id_owner . last_mut ( ) . unwrap ( ) ;
639
648
let local_id = * local_id_counter;
640
649
* local_id_counter += 1 ;
641
650
hir:: HirId {
642
- owner : def_index ,
651
+ owner : def_id . index ,
643
652
local_id : hir:: ItemLocalId :: from_u32 ( local_id) ,
644
653
}
645
654
} )
@@ -744,7 +753,7 @@ impl<'a> LoweringContext<'a> {
744
753
/// parameter while `f` is running (and restored afterwards).
745
754
fn collect_in_band_defs < T , F > (
746
755
& mut self ,
747
- parent_id : DefId ,
756
+ parent_def_id : LocalDefId ,
748
757
anonymous_lifetime_mode : AnonymousLifetimeMode ,
749
758
f : F ,
750
759
) -> ( Vec < hir:: GenericParam > , T )
@@ -768,7 +777,7 @@ impl<'a> LoweringContext<'a> {
768
777
let params = lifetimes_to_define
769
778
. into_iter ( )
770
779
. map ( |( span, hir_name) | self . lifetime_to_generic_param (
771
- span, hir_name, parent_id . index ,
780
+ span, hir_name, parent_def_id ,
772
781
) )
773
782
. chain ( in_band_ty_params. into_iter ( ) )
774
783
. collect ( ) ;
@@ -781,7 +790,7 @@ impl<'a> LoweringContext<'a> {
781
790
& mut self ,
782
791
span : Span ,
783
792
hir_name : ParamName ,
784
- parent_index : DefIndex ,
793
+ parent_def_id : LocalDefId ,
785
794
) -> hir:: GenericParam {
786
795
let node_id = self . sess . next_node_id ( ) ;
787
796
@@ -805,7 +814,7 @@ impl<'a> LoweringContext<'a> {
805
814
806
815
// Add a definition for the in-band lifetime def.
807
816
self . resolver . definitions ( ) . create_def_with_parent (
808
- parent_index ,
817
+ parent_def_id . index ,
809
818
node_id,
810
819
DefPathData :: LifetimeNs ( str_name) ,
811
820
ExpnId :: root ( ) ,
@@ -890,7 +899,7 @@ impl<'a> LoweringContext<'a> {
890
899
fn add_in_band_defs < F , T > (
891
900
& mut self ,
892
901
generics : & Generics ,
893
- parent_id : DefId ,
902
+ parent_def_id : LocalDefId ,
894
903
anonymous_lifetime_mode : AnonymousLifetimeMode ,
895
904
f : F ,
896
905
) -> ( hir:: Generics , T )
@@ -900,7 +909,7 @@ impl<'a> LoweringContext<'a> {
900
909
let ( in_band_defs, ( mut lowered_generics, res) ) = self . with_in_scope_lifetime_defs (
901
910
& generics. params ,
902
911
|this| {
903
- this. collect_in_band_defs ( parent_id , anonymous_lifetime_mode, |this| {
912
+ this. collect_in_band_defs ( parent_def_id , anonymous_lifetime_mode, |this| {
904
913
let mut params = Vec :: new ( ) ;
905
914
// Note: it is necessary to lower generics *before* calling `f`.
906
915
// When lowering `async fn`, there's a final step when lowering
@@ -1103,9 +1112,9 @@ impl<'a> LoweringContext<'a> {
1103
1112
// constructing the HIR for `impl bounds...` and then lowering that.
1104
1113
1105
1114
let impl_trait_node_id = self . sess . next_node_id ( ) ;
1106
- let parent_def_index = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
1115
+ let parent_def_id = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
1107
1116
self . resolver . definitions ( ) . create_def_with_parent (
1108
- parent_def_index ,
1117
+ parent_def_id . index ,
1109
1118
impl_trait_node_id,
1110
1119
DefPathData :: ImplTrait ,
1111
1120
ExpnId :: root ( ) ,
@@ -1288,11 +1297,11 @@ impl<'a> LoweringContext<'a> {
1288
1297
}
1289
1298
ImplTraitContext :: Universal ( in_band_ty_params) => {
1290
1299
// Add a definition for the in-band `Param`.
1291
- let def_index = self
1300
+ let def_id = self
1292
1301
. resolver
1293
1302
. definitions ( )
1294
- . opt_def_index ( def_node_id)
1295
- . unwrap ( ) ;
1303
+ . local_def_id ( def_node_id)
1304
+ . assert_local ( ) ;
1296
1305
1297
1306
let hir_bounds = self . lower_param_bounds (
1298
1307
bounds,
@@ -1317,7 +1326,7 @@ impl<'a> LoweringContext<'a> {
1317
1326
None ,
1318
1327
P ( hir:: Path {
1319
1328
span,
1320
- res : Res :: Def ( DefKind :: TyParam , DefId :: local ( def_index ) ) ,
1329
+ res : Res :: Def ( DefKind :: TyParam , def_id . to_def_id ( ) ) ,
1321
1330
segments : hir_vec ! [ hir:: PathSegment :: from_ident( ident) ] ,
1322
1331
} ) ,
1323
1332
) )
@@ -1383,19 +1392,19 @@ impl<'a> LoweringContext<'a> {
1383
1392
None ,
1384
1393
) ;
1385
1394
1386
- let opaque_ty_def_index = self
1395
+ let opaque_ty_def_id = self
1387
1396
. resolver
1388
1397
. definitions ( )
1389
- . opt_def_index ( opaque_ty_node_id)
1390
- . unwrap ( ) ;
1398
+ . local_def_id ( opaque_ty_node_id)
1399
+ . assert_local ( ) ;
1391
1400
1392
1401
self . allocate_hir_id_counter ( opaque_ty_node_id) ;
1393
1402
1394
1403
let hir_bounds = self . with_hir_id_owner ( opaque_ty_node_id, lower_bounds) ;
1395
1404
1396
1405
let ( lifetimes, lifetime_defs) = self . lifetimes_from_impl_trait_bounds (
1397
1406
opaque_ty_node_id,
1398
- opaque_ty_def_index ,
1407
+ opaque_ty_def_id ,
1399
1408
& hir_bounds,
1400
1409
) ;
1401
1410
@@ -1422,7 +1431,7 @@ impl<'a> LoweringContext<'a> {
1422
1431
origin : hir:: OpaqueTyOrigin :: FnReturn ,
1423
1432
} ;
1424
1433
1425
- trace ! ( "lower_opaque_impl_trait: {:#?}" , opaque_ty_def_index ) ;
1434
+ trace ! ( "lower_opaque_impl_trait: {:#?}" , opaque_ty_def_id ) ;
1426
1435
let opaque_ty_id = lctx. generate_opaque_type (
1427
1436
opaque_ty_node_id,
1428
1437
opaque_ty_item,
@@ -1467,22 +1476,22 @@ impl<'a> LoweringContext<'a> {
1467
1476
fn lifetimes_from_impl_trait_bounds (
1468
1477
& mut self ,
1469
1478
opaque_ty_id : NodeId ,
1470
- parent_index : DefIndex ,
1479
+ parent_def_id : LocalDefId ,
1471
1480
bounds : & hir:: GenericBounds ,
1472
1481
) -> ( HirVec < hir:: GenericArg > , HirVec < hir:: GenericParam > ) {
1473
1482
debug ! (
1474
1483
"lifetimes_from_impl_trait_bounds(opaque_ty_id={:?}, \
1475
- parent_index ={:?}, \
1484
+ parent_def_id ={:?}, \
1476
1485
bounds={:#?})",
1477
- opaque_ty_id, parent_index , bounds,
1486
+ opaque_ty_id, parent_def_id , bounds,
1478
1487
) ;
1479
1488
1480
1489
// This visitor walks over `impl Trait` bounds and creates defs for all lifetimes that
1481
1490
// appear in the bounds, excluding lifetimes that are created within the bounds.
1482
1491
// E.g., `'a`, `'b`, but not `'c` in `impl for<'c> SomeTrait<'a, 'b, 'c>`.
1483
1492
struct ImplTraitLifetimeCollector < ' r , ' a > {
1484
1493
context : & ' r mut LoweringContext < ' a > ,
1485
- parent : DefIndex ,
1494
+ parent : LocalDefId ,
1486
1495
opaque_ty_id : NodeId ,
1487
1496
collect_elided_lifetimes : bool ,
1488
1497
currently_bound_lifetimes : Vec < hir:: LifetimeName > ,
@@ -1586,7 +1595,7 @@ impl<'a> LoweringContext<'a> {
1586
1595
let hir_id =
1587
1596
self . context . lower_node_id_with_owner ( def_node_id, self . opaque_ty_id ) ;
1588
1597
self . context . resolver . definitions ( ) . create_def_with_parent (
1589
- self . parent ,
1598
+ self . parent . index ,
1590
1599
def_node_id,
1591
1600
DefPathData :: LifetimeNs ( name. ident ( ) . name ) ,
1592
1601
ExpnId :: root ( ) ,
@@ -1619,7 +1628,7 @@ impl<'a> LoweringContext<'a> {
1619
1628
1620
1629
let mut lifetime_collector = ImplTraitLifetimeCollector {
1621
1630
context : self ,
1622
- parent : parent_index ,
1631
+ parent : parent_def_id ,
1623
1632
opaque_ty_id,
1624
1633
collect_elided_lifetimes : true ,
1625
1634
currently_bound_lifetimes : Vec :: new ( ) ,
@@ -2072,14 +2081,14 @@ impl<'a> LoweringContext<'a> {
2072
2081
visitor. visit_ty ( ty) ;
2073
2082
}
2074
2083
}
2075
- let parent_def_id = DefId :: local ( self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ) ;
2084
+ let parent_def_id = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
2076
2085
( hir:: Local {
2077
2086
hir_id : self . lower_node_id ( l. id ) ,
2078
2087
ty : l. ty
2079
2088
. as_ref ( )
2080
2089
. map ( |t| self . lower_ty ( t,
2081
2090
if self . sess . features_untracked ( ) . impl_trait_in_bindings {
2082
- ImplTraitContext :: OpaqueTy ( Some ( parent_def_id) )
2091
+ ImplTraitContext :: OpaqueTy ( Some ( parent_def_id. to_def_id ( ) ) )
2083
2092
} else {
2084
2093
ImplTraitContext :: Disallowed ( ImplTraitPosition :: Binding )
2085
2094
}
@@ -2252,11 +2261,11 @@ impl<'a> LoweringContext<'a> {
2252
2261
None ,
2253
2262
) ;
2254
2263
2255
- let opaque_ty_def_index = self
2264
+ let opaque_ty_def_id = self
2256
2265
. resolver
2257
2266
. definitions ( )
2258
- . opt_def_index ( opaque_ty_node_id)
2259
- . unwrap ( ) ;
2267
+ . local_def_id ( opaque_ty_node_id)
2268
+ . assert_local ( ) ;
2260
2269
2261
2270
self . allocate_hir_id_counter ( opaque_ty_node_id) ;
2262
2271
@@ -2349,7 +2358,7 @@ impl<'a> LoweringContext<'a> {
2349
2358
lifetime_params
2350
2359
. iter ( ) . cloned ( )
2351
2360
. map ( |( span, hir_name) | {
2352
- this. lifetime_to_generic_param ( span, hir_name, opaque_ty_def_index )
2361
+ this. lifetime_to_generic_param ( span, hir_name, opaque_ty_def_id )
2353
2362
} )
2354
2363
. collect ( ) ;
2355
2364
@@ -2367,7 +2376,7 @@ impl<'a> LoweringContext<'a> {
2367
2376
origin : hir:: OpaqueTyOrigin :: AsyncFn ,
2368
2377
} ;
2369
2378
2370
- trace ! ( "exist ty from async fn def index : {:#?}" , opaque_ty_def_index ) ;
2379
+ trace ! ( "exist ty from async fn def id : {:#?}" , opaque_ty_def_id ) ;
2371
2380
let opaque_ty_id = this. generate_opaque_type (
2372
2381
opaque_ty_node_id,
2373
2382
opaque_ty_item,
0 commit comments