Skip to content

Commit 7463a4c

Browse files
committed
rustc: use LocalDefId instead of DefIndex in hir::lowering.
1 parent 82c868f commit 7463a4c

File tree

2 files changed

+63
-54
lines changed

2 files changed

+63
-54
lines changed

src/librustc/hir/lowering.rs

+54-45
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use crate::dep_graph::DepGraph;
3939
use crate::hir::{self, ParamName};
4040
use crate::hir::HirVec;
4141
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};
4343
use crate::hir::def::{Namespace, Res, DefKind, PartialRes, PerNS};
4444
use crate::hir::{GenericArg, ConstArg};
4545
use crate::hir::ptr::P;
@@ -149,7 +149,7 @@ pub struct LoweringContext<'a> {
149149

150150
type_def_lifetime_params: DefIdMap<usize>,
151151

152-
current_hir_id_owner: Vec<(DefIndex, u32)>,
152+
current_hir_id_owner: Vec<(LocalDefId, u32)>,
153153
item_local_id_counters: NodeMap<u32>,
154154
node_id_to_hir_id: IndexVec<NodeId, hir::HirId>,
155155

@@ -273,7 +273,9 @@ pub fn lower_crate(
273273
anonymous_lifetime_mode: AnonymousLifetimeMode::PassThrough,
274274
type_def_lifetime_params: Default::default(),
275275
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+
],
277279
item_local_id_counters: Default::default(),
278280
node_id_to_hir_id: IndexVec::new(),
279281
generator_kind: None,
@@ -397,13 +399,13 @@ impl<'a> LoweringContext<'a> {
397399
fn allocate_use_tree_hir_id_counters(
398400
&mut self,
399401
tree: &UseTree,
400-
owner: DefIndex,
402+
owner: LocalDefId,
401403
) {
402404
match tree.kind {
403405
UseTreeKind::Simple(_, id1, id2) => {
404406
for &id in &[id1, id2] {
405407
self.lctx.resolver.definitions().create_def_with_parent(
406-
owner,
408+
owner.index,
407409
id,
408410
DefPathData::Misc,
409411
ExpnId::root(),
@@ -416,7 +418,10 @@ impl<'a> LoweringContext<'a> {
416418
UseTreeKind::Nested(ref trees) => {
417419
for &(ref use_tree, id) in trees {
418420
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+
);
420425
}
421426
}
422427
}
@@ -454,7 +459,8 @@ impl<'a> LoweringContext<'a> {
454459
| ItemKind::TyAlias(_, ref generics)
455460
| ItemKind::OpaqueTy(_, ref generics)
456461
| 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();
458464
let count = generics
459465
.params
460466
.iter()
@@ -463,10 +469,13 @@ impl<'a> LoweringContext<'a> {
463469
_ => false,
464470
})
465471
.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);
467473
}
468474
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+
);
470479
}
471480
_ => {}
472481
}
@@ -611,12 +620,12 @@ impl<'a> LoweringContext<'a> {
611620
let counter = self.item_local_id_counters
612621
.insert(owner, HIR_ID_COUNTER_LOCKED)
613622
.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));
616625
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();
618627

619-
debug_assert!(def_index == new_def_index);
628+
debug_assert!(def_id == new_def_id);
620629
debug_assert!(new_counter >= counter);
621630

622631
let prev = self.item_local_id_counters
@@ -634,12 +643,12 @@ impl<'a> LoweringContext<'a> {
634643
/// properly. Calling the method twice with the same `NodeId` is fine though.
635644
fn lower_node_id(&mut self, ast_node_id: NodeId) -> hir::HirId {
636645
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) =
638647
this.current_hir_id_owner.last_mut().unwrap();
639648
let local_id = *local_id_counter;
640649
*local_id_counter += 1;
641650
hir::HirId {
642-
owner: def_index,
651+
owner: def_id.index,
643652
local_id: hir::ItemLocalId::from_u32(local_id),
644653
}
645654
})
@@ -744,7 +753,7 @@ impl<'a> LoweringContext<'a> {
744753
/// parameter while `f` is running (and restored afterwards).
745754
fn collect_in_band_defs<T, F>(
746755
&mut self,
747-
parent_id: DefId,
756+
parent_def_id: LocalDefId,
748757
anonymous_lifetime_mode: AnonymousLifetimeMode,
749758
f: F,
750759
) -> (Vec<hir::GenericParam>, T)
@@ -768,7 +777,7 @@ impl<'a> LoweringContext<'a> {
768777
let params = lifetimes_to_define
769778
.into_iter()
770779
.map(|(span, hir_name)| self.lifetime_to_generic_param(
771-
span, hir_name, parent_id.index,
780+
span, hir_name, parent_def_id,
772781
))
773782
.chain(in_band_ty_params.into_iter())
774783
.collect();
@@ -781,7 +790,7 @@ impl<'a> LoweringContext<'a> {
781790
&mut self,
782791
span: Span,
783792
hir_name: ParamName,
784-
parent_index: DefIndex,
793+
parent_def_id: LocalDefId,
785794
) -> hir::GenericParam {
786795
let node_id = self.sess.next_node_id();
787796

@@ -805,7 +814,7 @@ impl<'a> LoweringContext<'a> {
805814

806815
// Add a definition for the in-band lifetime def.
807816
self.resolver.definitions().create_def_with_parent(
808-
parent_index,
817+
parent_def_id.index,
809818
node_id,
810819
DefPathData::LifetimeNs(str_name),
811820
ExpnId::root(),
@@ -890,7 +899,7 @@ impl<'a> LoweringContext<'a> {
890899
fn add_in_band_defs<F, T>(
891900
&mut self,
892901
generics: &Generics,
893-
parent_id: DefId,
902+
parent_def_id: LocalDefId,
894903
anonymous_lifetime_mode: AnonymousLifetimeMode,
895904
f: F,
896905
) -> (hir::Generics, T)
@@ -900,7 +909,7 @@ impl<'a> LoweringContext<'a> {
900909
let (in_band_defs, (mut lowered_generics, res)) = self.with_in_scope_lifetime_defs(
901910
&generics.params,
902911
|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| {
904913
let mut params = Vec::new();
905914
// Note: it is necessary to lower generics *before* calling `f`.
906915
// When lowering `async fn`, there's a final step when lowering
@@ -1103,9 +1112,9 @@ impl<'a> LoweringContext<'a> {
11031112
// constructing the HIR for `impl bounds...` and then lowering that.
11041113

11051114
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;
11071116
self.resolver.definitions().create_def_with_parent(
1108-
parent_def_index,
1117+
parent_def_id.index,
11091118
impl_trait_node_id,
11101119
DefPathData::ImplTrait,
11111120
ExpnId::root(),
@@ -1288,11 +1297,11 @@ impl<'a> LoweringContext<'a> {
12881297
}
12891298
ImplTraitContext::Universal(in_band_ty_params) => {
12901299
// Add a definition for the in-band `Param`.
1291-
let def_index = self
1300+
let def_id = self
12921301
.resolver
12931302
.definitions()
1294-
.opt_def_index(def_node_id)
1295-
.unwrap();
1303+
.local_def_id(def_node_id)
1304+
.assert_local();
12961305

12971306
let hir_bounds = self.lower_param_bounds(
12981307
bounds,
@@ -1317,7 +1326,7 @@ impl<'a> LoweringContext<'a> {
13171326
None,
13181327
P(hir::Path {
13191328
span,
1320-
res: Res::Def(DefKind::TyParam, DefId::local(def_index)),
1329+
res: Res::Def(DefKind::TyParam, def_id.to_def_id()),
13211330
segments: hir_vec![hir::PathSegment::from_ident(ident)],
13221331
}),
13231332
))
@@ -1383,19 +1392,19 @@ impl<'a> LoweringContext<'a> {
13831392
None,
13841393
);
13851394

1386-
let opaque_ty_def_index = self
1395+
let opaque_ty_def_id = self
13871396
.resolver
13881397
.definitions()
1389-
.opt_def_index(opaque_ty_node_id)
1390-
.unwrap();
1398+
.local_def_id(opaque_ty_node_id)
1399+
.assert_local();
13911400

13921401
self.allocate_hir_id_counter(opaque_ty_node_id);
13931402

13941403
let hir_bounds = self.with_hir_id_owner(opaque_ty_node_id, lower_bounds);
13951404

13961405
let (lifetimes, lifetime_defs) = self.lifetimes_from_impl_trait_bounds(
13971406
opaque_ty_node_id,
1398-
opaque_ty_def_index,
1407+
opaque_ty_def_id,
13991408
&hir_bounds,
14001409
);
14011410

@@ -1422,7 +1431,7 @@ impl<'a> LoweringContext<'a> {
14221431
origin: hir::OpaqueTyOrigin::FnReturn,
14231432
};
14241433

1425-
trace!("lower_opaque_impl_trait: {:#?}", opaque_ty_def_index);
1434+
trace!("lower_opaque_impl_trait: {:#?}", opaque_ty_def_id);
14261435
let opaque_ty_id = lctx.generate_opaque_type(
14271436
opaque_ty_node_id,
14281437
opaque_ty_item,
@@ -1467,22 +1476,22 @@ impl<'a> LoweringContext<'a> {
14671476
fn lifetimes_from_impl_trait_bounds(
14681477
&mut self,
14691478
opaque_ty_id: NodeId,
1470-
parent_index: DefIndex,
1479+
parent_def_id: LocalDefId,
14711480
bounds: &hir::GenericBounds,
14721481
) -> (HirVec<hir::GenericArg>, HirVec<hir::GenericParam>) {
14731482
debug!(
14741483
"lifetimes_from_impl_trait_bounds(opaque_ty_id={:?}, \
1475-
parent_index={:?}, \
1484+
parent_def_id={:?}, \
14761485
bounds={:#?})",
1477-
opaque_ty_id, parent_index, bounds,
1486+
opaque_ty_id, parent_def_id, bounds,
14781487
);
14791488

14801489
// This visitor walks over `impl Trait` bounds and creates defs for all lifetimes that
14811490
// appear in the bounds, excluding lifetimes that are created within the bounds.
14821491
// E.g., `'a`, `'b`, but not `'c` in `impl for<'c> SomeTrait<'a, 'b, 'c>`.
14831492
struct ImplTraitLifetimeCollector<'r, 'a> {
14841493
context: &'r mut LoweringContext<'a>,
1485-
parent: DefIndex,
1494+
parent: LocalDefId,
14861495
opaque_ty_id: NodeId,
14871496
collect_elided_lifetimes: bool,
14881497
currently_bound_lifetimes: Vec<hir::LifetimeName>,
@@ -1586,7 +1595,7 @@ impl<'a> LoweringContext<'a> {
15861595
let hir_id =
15871596
self.context.lower_node_id_with_owner(def_node_id, self.opaque_ty_id);
15881597
self.context.resolver.definitions().create_def_with_parent(
1589-
self.parent,
1598+
self.parent.index,
15901599
def_node_id,
15911600
DefPathData::LifetimeNs(name.ident().name),
15921601
ExpnId::root(),
@@ -1619,7 +1628,7 @@ impl<'a> LoweringContext<'a> {
16191628

16201629
let mut lifetime_collector = ImplTraitLifetimeCollector {
16211630
context: self,
1622-
parent: parent_index,
1631+
parent: parent_def_id,
16231632
opaque_ty_id,
16241633
collect_elided_lifetimes: true,
16251634
currently_bound_lifetimes: Vec::new(),
@@ -2072,14 +2081,14 @@ impl<'a> LoweringContext<'a> {
20722081
visitor.visit_ty(ty);
20732082
}
20742083
}
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;
20762085
(hir::Local {
20772086
hir_id: self.lower_node_id(l.id),
20782087
ty: l.ty
20792088
.as_ref()
20802089
.map(|t| self.lower_ty(t,
20812090
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()))
20832092
} else {
20842093
ImplTraitContext::Disallowed(ImplTraitPosition::Binding)
20852094
}
@@ -2252,11 +2261,11 @@ impl<'a> LoweringContext<'a> {
22522261
None,
22532262
);
22542263

2255-
let opaque_ty_def_index = self
2264+
let opaque_ty_def_id = self
22562265
.resolver
22572266
.definitions()
2258-
.opt_def_index(opaque_ty_node_id)
2259-
.unwrap();
2267+
.local_def_id(opaque_ty_node_id)
2268+
.assert_local();
22602269

22612270
self.allocate_hir_id_counter(opaque_ty_node_id);
22622271

@@ -2349,7 +2358,7 @@ impl<'a> LoweringContext<'a> {
23492358
lifetime_params
23502359
.iter().cloned()
23512360
.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)
23532362
})
23542363
.collect();
23552364

@@ -2367,7 +2376,7 @@ impl<'a> LoweringContext<'a> {
23672376
origin: hir::OpaqueTyOrigin::AsyncFn,
23682377
};
23692378

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);
23712380
let opaque_ty_id = this.generate_opaque_type(
23722381
opaque_ty_node_id,
23732382
opaque_ty_item,

0 commit comments

Comments
 (0)