@@ -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
@@ -1109,9 +1118,9 @@ impl<'a> LoweringContext<'a> {
1109
1118
// constructing the HIR for `impl bounds...` and then lowering that.
1110
1119
1111
1120
let impl_trait_node_id = self . sess . next_node_id ( ) ;
1112
- let parent_def_index = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
1121
+ let parent_def_id = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
1113
1122
self . resolver . definitions ( ) . create_def_with_parent (
1114
- parent_def_index ,
1123
+ parent_def_id . index ,
1115
1124
impl_trait_node_id,
1116
1125
DefPathData :: ImplTrait ,
1117
1126
ExpnId :: root ( ) ,
@@ -1294,11 +1303,11 @@ impl<'a> LoweringContext<'a> {
1294
1303
}
1295
1304
ImplTraitContext :: Universal ( in_band_ty_params) => {
1296
1305
// Add a definition for the in-band `Param`.
1297
- let def_index = self
1306
+ let def_id = self
1298
1307
. resolver
1299
1308
. definitions ( )
1300
- . opt_def_index ( def_node_id)
1301
- . unwrap ( ) ;
1309
+ . local_def_id ( def_node_id)
1310
+ . assert_local ( ) ;
1302
1311
1303
1312
let hir_bounds = self . lower_param_bounds (
1304
1313
bounds,
@@ -1323,7 +1332,7 @@ impl<'a> LoweringContext<'a> {
1323
1332
None ,
1324
1333
P ( hir:: Path {
1325
1334
span,
1326
- res : Res :: Def ( DefKind :: TyParam , DefId :: local ( def_index ) ) ,
1335
+ res : Res :: Def ( DefKind :: TyParam , def_id . to_def_id ( ) ) ,
1327
1336
segments : hir_vec ! [ hir:: PathSegment :: from_ident( ident) ] ,
1328
1337
} ) ,
1329
1338
) )
@@ -1389,19 +1398,19 @@ impl<'a> LoweringContext<'a> {
1389
1398
None ,
1390
1399
) ;
1391
1400
1392
- let opaque_ty_def_index = self
1401
+ let opaque_ty_def_id = self
1393
1402
. resolver
1394
1403
. definitions ( )
1395
- . opt_def_index ( opaque_ty_node_id)
1396
- . unwrap ( ) ;
1404
+ . local_def_id ( opaque_ty_node_id)
1405
+ . assert_local ( ) ;
1397
1406
1398
1407
self . allocate_hir_id_counter ( opaque_ty_node_id) ;
1399
1408
1400
1409
let hir_bounds = self . with_hir_id_owner ( opaque_ty_node_id, lower_bounds) ;
1401
1410
1402
1411
let ( lifetimes, lifetime_defs) = self . lifetimes_from_impl_trait_bounds (
1403
1412
opaque_ty_node_id,
1404
- opaque_ty_def_index ,
1413
+ opaque_ty_def_id ,
1405
1414
& hir_bounds,
1406
1415
) ;
1407
1416
@@ -1428,7 +1437,7 @@ impl<'a> LoweringContext<'a> {
1428
1437
origin : hir:: OpaqueTyOrigin :: FnReturn ,
1429
1438
} ;
1430
1439
1431
- trace ! ( "lower_opaque_impl_trait: {:#?}" , opaque_ty_def_index ) ;
1440
+ trace ! ( "lower_opaque_impl_trait: {:#?}" , opaque_ty_def_id ) ;
1432
1441
let opaque_ty_id = lctx. generate_opaque_type (
1433
1442
opaque_ty_node_id,
1434
1443
opaque_ty_item,
@@ -1473,22 +1482,22 @@ impl<'a> LoweringContext<'a> {
1473
1482
fn lifetimes_from_impl_trait_bounds (
1474
1483
& mut self ,
1475
1484
opaque_ty_id : NodeId ,
1476
- parent_index : DefIndex ,
1485
+ parent_def_id : LocalDefId ,
1477
1486
bounds : & hir:: GenericBounds ,
1478
1487
) -> ( HirVec < hir:: GenericArg > , HirVec < hir:: GenericParam > ) {
1479
1488
debug ! (
1480
1489
"lifetimes_from_impl_trait_bounds(opaque_ty_id={:?}, \
1481
- parent_index ={:?}, \
1490
+ parent_def_id ={:?}, \
1482
1491
bounds={:#?})",
1483
- opaque_ty_id, parent_index , bounds,
1492
+ opaque_ty_id, parent_def_id , bounds,
1484
1493
) ;
1485
1494
1486
1495
// This visitor walks over `impl Trait` bounds and creates defs for all lifetimes that
1487
1496
// appear in the bounds, excluding lifetimes that are created within the bounds.
1488
1497
// E.g., `'a`, `'b`, but not `'c` in `impl for<'c> SomeTrait<'a, 'b, 'c>`.
1489
1498
struct ImplTraitLifetimeCollector < ' r , ' a > {
1490
1499
context : & ' r mut LoweringContext < ' a > ,
1491
- parent : DefIndex ,
1500
+ parent : LocalDefId ,
1492
1501
opaque_ty_id : NodeId ,
1493
1502
collect_elided_lifetimes : bool ,
1494
1503
currently_bound_lifetimes : Vec < hir:: LifetimeName > ,
@@ -1592,7 +1601,7 @@ impl<'a> LoweringContext<'a> {
1592
1601
let hir_id =
1593
1602
self . context . lower_node_id_with_owner ( def_node_id, self . opaque_ty_id ) ;
1594
1603
self . context . resolver . definitions ( ) . create_def_with_parent (
1595
- self . parent ,
1604
+ self . parent . index ,
1596
1605
def_node_id,
1597
1606
DefPathData :: LifetimeNs ( name. ident ( ) . name ) ,
1598
1607
ExpnId :: root ( ) ,
@@ -1625,7 +1634,7 @@ impl<'a> LoweringContext<'a> {
1625
1634
1626
1635
let mut lifetime_collector = ImplTraitLifetimeCollector {
1627
1636
context : self ,
1628
- parent : parent_index ,
1637
+ parent : parent_def_id ,
1629
1638
opaque_ty_id,
1630
1639
collect_elided_lifetimes : true ,
1631
1640
currently_bound_lifetimes : Vec :: new ( ) ,
@@ -2078,14 +2087,14 @@ impl<'a> LoweringContext<'a> {
2078
2087
visitor. visit_ty ( ty) ;
2079
2088
}
2080
2089
}
2081
- let parent_def_id = DefId :: local ( self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ) ;
2090
+ let parent_def_id = self . current_hir_id_owner . last ( ) . unwrap ( ) . 0 ;
2082
2091
( hir:: Local {
2083
2092
hir_id : self . lower_node_id ( l. id ) ,
2084
2093
ty : l. ty
2085
2094
. as_ref ( )
2086
2095
. map ( |t| self . lower_ty ( t,
2087
2096
if self . sess . features_untracked ( ) . impl_trait_in_bindings {
2088
- ImplTraitContext :: OpaqueTy ( Some ( parent_def_id) )
2097
+ ImplTraitContext :: OpaqueTy ( Some ( parent_def_id. to_def_id ( ) ) )
2089
2098
} else {
2090
2099
ImplTraitContext :: Disallowed ( ImplTraitPosition :: Binding )
2091
2100
}
@@ -2258,11 +2267,11 @@ impl<'a> LoweringContext<'a> {
2258
2267
None ,
2259
2268
) ;
2260
2269
2261
- let opaque_ty_def_index = self
2270
+ let opaque_ty_def_id = self
2262
2271
. resolver
2263
2272
. definitions ( )
2264
- . opt_def_index ( opaque_ty_node_id)
2265
- . unwrap ( ) ;
2273
+ . local_def_id ( opaque_ty_node_id)
2274
+ . assert_local ( ) ;
2266
2275
2267
2276
self . allocate_hir_id_counter ( opaque_ty_node_id) ;
2268
2277
@@ -2355,7 +2364,7 @@ impl<'a> LoweringContext<'a> {
2355
2364
lifetime_params
2356
2365
. iter ( ) . cloned ( )
2357
2366
. map ( |( span, hir_name) | {
2358
- this. lifetime_to_generic_param ( span, hir_name, opaque_ty_def_index )
2367
+ this. lifetime_to_generic_param ( span, hir_name, opaque_ty_def_id )
2359
2368
} )
2360
2369
. collect ( ) ;
2361
2370
@@ -2373,7 +2382,7 @@ impl<'a> LoweringContext<'a> {
2373
2382
origin : hir:: OpaqueTyOrigin :: AsyncFn ,
2374
2383
} ;
2375
2384
2376
- trace ! ( "exist ty from async fn def index : {:#?}" , opaque_ty_def_index ) ;
2385
+ trace ! ( "exist ty from async fn def id : {:#?}" , opaque_ty_def_id ) ;
2377
2386
let opaque_ty_id = this. generate_opaque_type (
2378
2387
opaque_ty_node_id,
2379
2388
opaque_ty_item,
0 commit comments