Skip to content

Commit 7c1dcba

Browse files
committed
rustc: use LocalDefId instead of DefIndex in hir::lowering.
1 parent d7af449 commit 7c1dcba

File tree

2 files changed

+63
-54
lines changed

2 files changed

+63
-54
lines changed

src/librustc/hir/lowering.rs

Lines changed: 54 additions & 45 deletions
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
@@ -1109,9 +1118,9 @@ impl<'a> LoweringContext<'a> {
11091118
// constructing the HIR for `impl bounds...` and then lowering that.
11101119

11111120
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;
11131122
self.resolver.definitions().create_def_with_parent(
1114-
parent_def_index,
1123+
parent_def_id.index,
11151124
impl_trait_node_id,
11161125
DefPathData::ImplTrait,
11171126
ExpnId::root(),
@@ -1294,11 +1303,11 @@ impl<'a> LoweringContext<'a> {
12941303
}
12951304
ImplTraitContext::Universal(in_band_ty_params) => {
12961305
// Add a definition for the in-band `Param`.
1297-
let def_index = self
1306+
let def_id = self
12981307
.resolver
12991308
.definitions()
1300-
.opt_def_index(def_node_id)
1301-
.unwrap();
1309+
.local_def_id(def_node_id)
1310+
.assert_local();
13021311

13031312
let hir_bounds = self.lower_param_bounds(
13041313
bounds,
@@ -1323,7 +1332,7 @@ impl<'a> LoweringContext<'a> {
13231332
None,
13241333
P(hir::Path {
13251334
span,
1326-
res: Res::Def(DefKind::TyParam, DefId::local(def_index)),
1335+
res: Res::Def(DefKind::TyParam, def_id.to_def_id()),
13271336
segments: hir_vec![hir::PathSegment::from_ident(ident)],
13281337
}),
13291338
))
@@ -1389,19 +1398,19 @@ impl<'a> LoweringContext<'a> {
13891398
None,
13901399
);
13911400

1392-
let opaque_ty_def_index = self
1401+
let opaque_ty_def_id = self
13931402
.resolver
13941403
.definitions()
1395-
.opt_def_index(opaque_ty_node_id)
1396-
.unwrap();
1404+
.local_def_id(opaque_ty_node_id)
1405+
.assert_local();
13971406

13981407
self.allocate_hir_id_counter(opaque_ty_node_id);
13991408

14001409
let hir_bounds = self.with_hir_id_owner(opaque_ty_node_id, lower_bounds);
14011410

14021411
let (lifetimes, lifetime_defs) = self.lifetimes_from_impl_trait_bounds(
14031412
opaque_ty_node_id,
1404-
opaque_ty_def_index,
1413+
opaque_ty_def_id,
14051414
&hir_bounds,
14061415
);
14071416

@@ -1428,7 +1437,7 @@ impl<'a> LoweringContext<'a> {
14281437
origin: hir::OpaqueTyOrigin::FnReturn,
14291438
};
14301439

1431-
trace!("lower_opaque_impl_trait: {:#?}", opaque_ty_def_index);
1440+
trace!("lower_opaque_impl_trait: {:#?}", opaque_ty_def_id);
14321441
let opaque_ty_id = lctx.generate_opaque_type(
14331442
opaque_ty_node_id,
14341443
opaque_ty_item,
@@ -1473,22 +1482,22 @@ impl<'a> LoweringContext<'a> {
14731482
fn lifetimes_from_impl_trait_bounds(
14741483
&mut self,
14751484
opaque_ty_id: NodeId,
1476-
parent_index: DefIndex,
1485+
parent_def_id: LocalDefId,
14771486
bounds: &hir::GenericBounds,
14781487
) -> (HirVec<hir::GenericArg>, HirVec<hir::GenericParam>) {
14791488
debug!(
14801489
"lifetimes_from_impl_trait_bounds(opaque_ty_id={:?}, \
1481-
parent_index={:?}, \
1490+
parent_def_id={:?}, \
14821491
bounds={:#?})",
1483-
opaque_ty_id, parent_index, bounds,
1492+
opaque_ty_id, parent_def_id, bounds,
14841493
);
14851494

14861495
// This visitor walks over `impl Trait` bounds and creates defs for all lifetimes that
14871496
// appear in the bounds, excluding lifetimes that are created within the bounds.
14881497
// E.g., `'a`, `'b`, but not `'c` in `impl for<'c> SomeTrait<'a, 'b, 'c>`.
14891498
struct ImplTraitLifetimeCollector<'r, 'a> {
14901499
context: &'r mut LoweringContext<'a>,
1491-
parent: DefIndex,
1500+
parent: LocalDefId,
14921501
opaque_ty_id: NodeId,
14931502
collect_elided_lifetimes: bool,
14941503
currently_bound_lifetimes: Vec<hir::LifetimeName>,
@@ -1592,7 +1601,7 @@ impl<'a> LoweringContext<'a> {
15921601
let hir_id =
15931602
self.context.lower_node_id_with_owner(def_node_id, self.opaque_ty_id);
15941603
self.context.resolver.definitions().create_def_with_parent(
1595-
self.parent,
1604+
self.parent.index,
15961605
def_node_id,
15971606
DefPathData::LifetimeNs(name.ident().name),
15981607
ExpnId::root(),
@@ -1625,7 +1634,7 @@ impl<'a> LoweringContext<'a> {
16251634

16261635
let mut lifetime_collector = ImplTraitLifetimeCollector {
16271636
context: self,
1628-
parent: parent_index,
1637+
parent: parent_def_id,
16291638
opaque_ty_id,
16301639
collect_elided_lifetimes: true,
16311640
currently_bound_lifetimes: Vec::new(),
@@ -2078,14 +2087,14 @@ impl<'a> LoweringContext<'a> {
20782087
visitor.visit_ty(ty);
20792088
}
20802089
}
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;
20822091
(hir::Local {
20832092
hir_id: self.lower_node_id(l.id),
20842093
ty: l.ty
20852094
.as_ref()
20862095
.map(|t| self.lower_ty(t,
20872096
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()))
20892098
} else {
20902099
ImplTraitContext::Disallowed(ImplTraitPosition::Binding)
20912100
}
@@ -2258,11 +2267,11 @@ impl<'a> LoweringContext<'a> {
22582267
None,
22592268
);
22602269

2261-
let opaque_ty_def_index = self
2270+
let opaque_ty_def_id = self
22622271
.resolver
22632272
.definitions()
2264-
.opt_def_index(opaque_ty_node_id)
2265-
.unwrap();
2273+
.local_def_id(opaque_ty_node_id)
2274+
.assert_local();
22662275

22672276
self.allocate_hir_id_counter(opaque_ty_node_id);
22682277

@@ -2355,7 +2364,7 @@ impl<'a> LoweringContext<'a> {
23552364
lifetime_params
23562365
.iter().cloned()
23572366
.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)
23592368
})
23602369
.collect();
23612370

@@ -2373,7 +2382,7 @@ impl<'a> LoweringContext<'a> {
23732382
origin: hir::OpaqueTyOrigin::AsyncFn,
23742383
};
23752384

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);
23772386
let opaque_ty_id = this.generate_opaque_type(
23782387
opaque_ty_node_id,
23792388
opaque_ty_item,

0 commit comments

Comments
 (0)