Skip to content

Commit 3a8b014

Browse files
committed
Auto merge of #98106 - cjgillot:split-definitions, r=michaelwoerister
Split up `Definitions` and `ResolverAstLowering`. Split off #95573 r? `@michaelwoerister`
2 parents ecdd374 + ae5959f commit 3a8b014

File tree

32 files changed

+600
-487
lines changed

32 files changed

+600
-487
lines changed

Cargo.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -3571,6 +3571,7 @@ dependencies = [
35713571
"rustc_errors",
35723572
"rustc_hir",
35733573
"rustc_index",
3574+
"rustc_middle",
35743575
"rustc_query_system",
35753576
"rustc_session",
35763577
"rustc_span",
@@ -4376,7 +4377,6 @@ dependencies = [
43764377
"bitflags",
43774378
"rustc_arena",
43784379
"rustc_ast",
4379-
"rustc_ast_lowering",
43804380
"rustc_ast_pretty",
43814381
"rustc_attr",
43824382
"rustc_data_structures",

compiler/rustc_ast_lowering/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ rustc_hir = { path = "../rustc_hir" }
1414
rustc_target = { path = "../rustc_target" }
1515
rustc_data_structures = { path = "../rustc_data_structures" }
1616
rustc_index = { path = "../rustc_index" }
17+
rustc_middle = { path = "../rustc_middle" }
1718
rustc_query_system = { path = "../rustc_query_system" }
1819
rustc_span = { path = "../rustc_span" }
1920
rustc_errors = { path = "../rustc_errors" }

compiler/rustc_ast_lowering/src/asm.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{ImplTraitContext, ImplTraitPosition, ParamMode};
1+
use crate::{ImplTraitContext, ImplTraitPosition, ParamMode, ResolverAstLoweringExt};
22

33
use super::LoweringContext;
44

@@ -11,7 +11,7 @@ use rustc_hir as hir;
1111
use rustc_hir::def::{DefKind, Res};
1212
use rustc_hir::definitions::DefPathData;
1313
use rustc_session::parse::feature_err;
14-
use rustc_span::{sym, ExpnId, Span};
14+
use rustc_span::{sym, Span};
1515
use rustc_target::asm;
1616
use std::collections::hash_map::Entry;
1717
use std::fmt::Write;
@@ -242,14 +242,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
242242

243243
// Wrap the expression in an AnonConst.
244244
let parent_def_id = self.current_hir_id_owner;
245-
let node_id = self.resolver.next_node_id();
246-
self.resolver.create_def(
247-
parent_def_id,
248-
node_id,
249-
DefPathData::AnonConst,
250-
ExpnId::root(),
251-
*op_sp,
252-
);
245+
let node_id = self.next_node_id();
246+
self.create_def(parent_def_id, node_id, DefPathData::AnonConst);
253247
let anon_const = AnonConst { id: node_id, value: P(expr) };
254248
hir::InlineAsmOperand::SymFn {
255249
anon_const: self.lower_anon_const(&anon_const),

compiler/rustc_ast_lowering/src/expr.rs

+5-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use crate::{FnDeclKind, ImplTraitPosition};
2-
1+
use super::ResolverAstLoweringExt;
32
use super::{ImplTraitContext, LoweringContext, ParamMode, ParenthesizedGenericArgs};
3+
use crate::{FnDeclKind, ImplTraitPosition};
44

55
use rustc_ast::attr;
66
use rustc_ast::ptr::P as AstP;
@@ -11,7 +11,6 @@ use rustc_errors::struct_span_err;
1111
use rustc_hir as hir;
1212
use rustc_hir::def::Res;
1313
use rustc_hir::definitions::DefPathData;
14-
use rustc_span::hygiene::ExpnId;
1514
use rustc_span::source_map::{respan, DesugaringKind, Span, Spanned};
1615
use rustc_span::symbol::{sym, Ident};
1716
use rustc_span::DUMMY_SP;
@@ -355,16 +354,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
355354
for (idx, arg) in args.into_iter().enumerate() {
356355
if legacy_args_idx.contains(&idx) {
357356
let parent_def_id = self.current_hir_id_owner;
358-
let node_id = self.resolver.next_node_id();
357+
let node_id = self.next_node_id();
359358

360359
// Add a definition for the in-band const def.
361-
self.resolver.create_def(
362-
parent_def_id,
363-
node_id,
364-
DefPathData::AnonConst,
365-
ExpnId::root(),
366-
arg.span,
367-
);
360+
self.create_def(parent_def_id, node_id, DefPathData::AnonConst);
368361

369362
let anon_const = AnonConst { id: node_id, value: arg };
370363
generic_args.push(AngleBracketedArg::Arg(GenericArg::Const(anon_const)));
@@ -724,7 +717,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
724717
};
725718

726719
// `::std::task::Poll::Ready(result) => break result`
727-
let loop_node_id = self.resolver.next_node_id();
720+
let loop_node_id = self.next_node_id();
728721
let loop_hir_id = self.lower_node_id(loop_node_id);
729722
let ready_arm = {
730723
let x_ident = Ident::with_dummy_span(sym::result);

compiler/rustc_ast_lowering/src/index.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use rustc_hir::definitions;
66
use rustc_hir::intravisit::{self, Visitor};
77
use rustc_hir::*;
88
use rustc_index::vec::{Idx, IndexVec};
9+
use rustc_middle::span_bug;
910
use rustc_session::Session;
1011
use rustc_span::source_map::SourceMap;
1112
use rustc_span::{Span, DUMMY_SP};
@@ -75,7 +76,8 @@ impl<'a, 'hir> NodeCollector<'a, 'hir> {
7576
// owner of that node.
7677
if cfg!(debug_assertions) {
7778
if hir_id.owner != self.owner {
78-
panic!(
79+
span_bug!(
80+
span,
7981
"inconsistent DepNode at `{:?}` for `{:?}`: \
8082
current_dep_node_owner={} ({:?}), hir_id.owner={} ({:?})",
8183
self.source_map.span_to_diagnostic_string(span),

compiler/rustc_ast_lowering/src/item.rs

+29-20
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
use super::{AstOwner, ImplTraitContext, ImplTraitPosition, ResolverAstLowering};
1+
use super::ResolverAstLoweringExt;
2+
use super::{AstOwner, ImplTraitContext, ImplTraitPosition};
23
use super::{LoweringContext, ParamMode};
34
use crate::{Arena, FnDeclKind};
45

@@ -11,8 +12,11 @@ use rustc_errors::struct_span_err;
1112
use rustc_hir as hir;
1213
use rustc_hir::def::{DefKind, Res};
1314
use rustc_hir::def_id::{LocalDefId, CRATE_DEF_ID};
15+
use rustc_hir::definitions::Definitions;
1416
use rustc_hir::PredicateOrigin;
1517
use rustc_index::vec::{Idx, IndexVec};
18+
use rustc_middle::ty::{ResolverAstLowering, ResolverOutputs};
19+
use rustc_session::cstore::CrateStoreDyn;
1620
use rustc_session::Session;
1721
use rustc_span::source_map::DesugaringKind;
1822
use rustc_span::symbol::{kw, sym, Ident};
@@ -24,7 +28,10 @@ use std::iter;
2428

2529
pub(super) struct ItemLowerer<'a, 'hir> {
2630
pub(super) sess: &'a Session,
27-
pub(super) resolver: &'a mut dyn ResolverAstLowering,
31+
pub(super) definitions: &'a mut Definitions,
32+
pub(super) cstore: &'a CrateStoreDyn,
33+
pub(super) resolutions: &'a ResolverOutputs,
34+
pub(super) resolver: &'a mut ResolverAstLowering,
2835
pub(super) arena: &'hir Arena<'hir>,
2936
pub(super) ast_index: &'a IndexVec<LocalDefId, AstOwner<'a>>,
3037
pub(super) owners: &'a mut IndexVec<LocalDefId, hir::MaybeOwner<&'hir hir::OwnerInfo<'hir>>>,
@@ -59,6 +66,9 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
5966
let mut lctx = LoweringContext {
6067
// Pseudo-globals.
6168
sess: &self.sess,
69+
definitions: self.definitions,
70+
cstore: self.cstore,
71+
resolutions: self.resolutions,
6272
resolver: self.resolver,
6373
arena: self.arena,
6474

@@ -118,8 +128,7 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
118128

119129
#[instrument(level = "debug", skip(self, c))]
120130
fn lower_crate(&mut self, c: &Crate) {
121-
debug_assert_eq!(self.resolver.local_def_id(CRATE_NODE_ID), CRATE_DEF_ID);
122-
131+
debug_assert_eq!(self.resolver.node_id_to_def_id[&CRATE_NODE_ID], CRATE_DEF_ID);
123132
self.with_lctx(CRATE_NODE_ID, |lctx| {
124133
let module = lctx.lower_mod(&c.items, &c.spans);
125134
lctx.lower_attrs(hir::CRATE_HIR_ID, &c.attrs);
@@ -133,10 +142,10 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
133142
}
134143

135144
fn lower_assoc_item(&mut self, item: &AssocItem, ctxt: AssocCtxt) {
136-
let def_id = self.resolver.local_def_id(item.id);
145+
let def_id = self.resolver.node_id_to_def_id[&item.id];
137146

138147
let parent_id = {
139-
let parent = self.resolver.definitions().def_key(def_id).parent;
148+
let parent = self.definitions.def_key(def_id).parent;
140149
let local_def_index = parent.unwrap();
141150
LocalDefId { local_def_index }
142151
};
@@ -177,7 +186,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
177186
}
178187

179188
pub(super) fn lower_item_ref(&mut self, i: &Item) -> SmallVec<[hir::ItemId; 1]> {
180-
let mut node_ids = smallvec![hir::ItemId { def_id: self.resolver.local_def_id(i.id) }];
189+
let mut node_ids = smallvec![hir::ItemId { def_id: self.local_def_id(i.id) }];
181190
if let ItemKind::Use(ref use_tree) = &i.kind {
182191
self.lower_item_id_use_tree(use_tree, i.id, &mut node_ids);
183192
}
@@ -193,7 +202,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
193202
match tree.kind {
194203
UseTreeKind::Nested(ref nested_vec) => {
195204
for &(ref nested, id) in nested_vec {
196-
vec.push(hir::ItemId { def_id: self.resolver.local_def_id(id) });
205+
vec.push(hir::ItemId { def_id: self.local_def_id(id) });
197206
self.lower_item_id_use_tree(nested, id, vec);
198207
}
199208
}
@@ -202,7 +211,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
202211
for (_, &id) in
203212
iter::zip(self.expect_full_res_from_use(base_id).skip(1), &[id1, id2])
204213
{
205-
vec.push(hir::ItemId { def_id: self.resolver.local_def_id(id) });
214+
vec.push(hir::ItemId { def_id: self.local_def_id(id) });
206215
}
207216
}
208217
}
@@ -467,7 +476,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
467476
}
468477
ItemKind::MacroDef(MacroDef { ref body, macro_rules }) => {
469478
let body = P(self.lower_mac_args(body));
470-
let macro_kind = self.resolver.decl_macro_kind(self.resolver.local_def_id(id));
479+
let macro_kind = self.resolver.decl_macro_kind(self.local_def_id(id));
471480
hir::ItemKind::Macro(ast::MacroDef { body, macro_rules }, macro_kind)
472481
}
473482
ItemKind::MacCall(..) => {
@@ -527,7 +536,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
527536
// Essentially a single `use` which imports two names is desugared into
528537
// two imports.
529538
for new_node_id in [id1, id2] {
530-
let new_id = self.resolver.local_def_id(new_node_id);
539+
let new_id = self.local_def_id(new_node_id);
531540
let Some(res) = resolutions.next() else {
532541
// Associate an HirId to both ids even if there is no resolution.
533542
let _old = self.children.insert(
@@ -540,7 +549,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
540549
let ident = *ident;
541550
let mut path = path.clone();
542551
for seg in &mut path.segments {
543-
seg.id = self.resolver.next_node_id();
552+
seg.id = self.next_node_id();
544553
}
545554
let span = path.span;
546555

@@ -603,13 +612,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
603612

604613
// Add all the nested `PathListItem`s to the HIR.
605614
for &(ref use_tree, id) in trees {
606-
let new_hir_id = self.resolver.local_def_id(id);
615+
let new_hir_id = self.local_def_id(id);
607616

608617
let mut prefix = prefix.clone();
609618

610619
// Give the segments new node-ids since they are being cloned.
611620
for seg in &mut prefix.segments {
612-
seg.id = self.resolver.next_node_id();
621+
seg.id = self.next_node_id();
613622
}
614623

615624
// Each `use` import is an item and thus are owners of the
@@ -683,7 +692,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
683692

684693
fn lower_foreign_item_ref(&mut self, i: &ForeignItem) -> hir::ForeignItemRef {
685694
hir::ForeignItemRef {
686-
id: hir::ForeignItemId { def_id: self.resolver.local_def_id(i.id) },
695+
id: hir::ForeignItemId { def_id: self.local_def_id(i.id) },
687696
ident: self.lower_ident(i.ident),
688697
span: self.lower_span(i.span),
689698
}
@@ -839,7 +848,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
839848
}
840849
AssocItemKind::MacCall(..) => unimplemented!(),
841850
};
842-
let id = hir::TraitItemId { def_id: self.resolver.local_def_id(i.id) };
851+
let id = hir::TraitItemId { def_id: self.local_def_id(i.id) };
843852
let defaultness = hir::Defaultness::Default { has_value: has_default };
844853
hir::TraitItemRef {
845854
id,
@@ -919,7 +928,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
919928
let has_value = true;
920929
let (defaultness, _) = self.lower_defaultness(i.kind.defaultness(), has_value);
921930
hir::ImplItemRef {
922-
id: hir::ImplItemId { def_id: self.resolver.local_def_id(i.id) },
931+
id: hir::ImplItemId { def_id: self.local_def_id(i.id) },
923932
ident: self.lower_ident(i.ident),
924933
span: self.lower_span(i.span),
925934
defaultness,
@@ -1331,7 +1340,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
13311340
generics
13321341
.params
13331342
.iter()
1334-
.any(|p| def_id == self.resolver.local_def_id(p.id).to_def_id())
1343+
.any(|p| def_id == self.local_def_id(p.id).to_def_id())
13351344
}
13361345
// Either the `bounded_ty` is not a plain type parameter, or
13371346
// it's not found in the generic type parameters list.
@@ -1435,7 +1444,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
14351444
match kind {
14361445
GenericParamKind::Const { .. } => None,
14371446
GenericParamKind::Type { .. } => {
1438-
let def_id = self.resolver.local_def_id(id).to_def_id();
1447+
let def_id = self.local_def_id(id).to_def_id();
14391448
let ty_path = self.arena.alloc(hir::Path {
14401449
span: param_span,
14411450
res: Res::Def(DefKind::TyParam, def_id),
@@ -1458,7 +1467,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
14581467
let res = self.resolver.get_lifetime_res(id).unwrap_or_else(|| {
14591468
panic!("Missing resolution for lifetime {:?} at {:?}", id, ident.span)
14601469
});
1461-
let lt_id = self.resolver.next_node_id();
1470+
let lt_id = self.next_node_id();
14621471
let lifetime = self.new_named_lifetime_with_res(lt_id, ident_span, ident, res);
14631472
Some(hir::WherePredicate::RegionPredicate(hir::WhereRegionPredicate {
14641473
lifetime,

0 commit comments

Comments
 (0)