Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 1769fb1

Browse files
committed
Replace extension trait with wrapper struct
1 parent 41e852e commit 1769fb1

File tree

7 files changed

+60
-42
lines changed

7 files changed

+60
-42
lines changed

compiler/rustc_ast_lowering/src/asm.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ use super::errors::{
2020
};
2121
use crate::{
2222
AllowReturnTypeNotation, ImplTraitContext, ImplTraitPosition, ParamMode,
23-
ResolverAstLoweringExt, fluent_generated as fluent,
23+
fluent_generated as fluent,
2424
};
2525

2626
impl<'a, 'hir> LoweringContext<'a, 'hir> {

compiler/rustc_ast_lowering/src/delegation.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@ use rustc_ast::*;
4646
use rustc_errors::ErrorGuaranteed;
4747
use rustc_hir::def_id::DefId;
4848
use rustc_middle::span_bug;
49-
use rustc_middle::ty::{Asyncness, ResolverAstLowering};
49+
use rustc_middle::ty::Asyncness;
5050
use rustc_span::{Ident, Span};
5151
use {rustc_ast as ast, rustc_hir as hir};
5252

5353
use super::{GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode};
54-
use crate::{AllowReturnTypeNotation, ImplTraitPosition, ResolverAstLoweringExt};
54+
use crate::{AllowReturnTypeNotation, ImplTraitPosition, PerOwnerResolver};
5555

5656
pub(crate) struct DelegationResults<'hir> {
5757
pub body_id: hir::BodyId,
@@ -81,6 +81,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
8181
DefKind::AssocFn => match def_id.as_local() {
8282
Some(local_def_id) => self
8383
.resolver
84+
.general
8485
.delegation_fn_sigs
8586
.get(&local_def_id)
8687
.is_some_and(|sig| sig.has_self),
@@ -149,7 +150,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
149150
if let Some(local_sig_id) = sig_id.as_local() {
150151
// Map may be filled incorrectly due to recursive delegation.
151152
// Error will be emitted later during HIR ty lowering.
152-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
153+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
153154
Some(sig) => (sig.param_count, sig.c_variadic),
154155
None => (0, false),
155156
}
@@ -197,7 +198,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
197198
span: Span,
198199
) -> hir::FnSig<'hir> {
199200
let header = if let Some(local_sig_id) = sig_id.as_local() {
200-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
201+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
201202
Some(sig) => {
202203
let parent = self.tcx.parent(sig_id);
203204
// HACK: we override the default safety instead of generating attributes from the ether.
@@ -279,7 +280,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
279280
&& idx == 0
280281
{
281282
let mut self_resolver = SelfResolver {
282-
resolver: this.resolver,
283+
resolver: &mut this.resolver,
283284
path_id: delegation.id,
284285
self_param_id: pat_node_id,
285286
};
@@ -424,25 +425,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
424425
}
425426
}
426427

427-
struct SelfResolver<'a> {
428-
resolver: &'a mut ResolverAstLowering,
428+
struct SelfResolver<'a, 'b> {
429+
resolver: &'b mut PerOwnerResolver<'a>,
429430
path_id: NodeId,
430431
self_param_id: NodeId,
431432
}
432433

433-
impl<'a> SelfResolver<'a> {
434+
impl SelfResolver<'_, '_> {
434435
fn try_replace_id(&mut self, id: NodeId) {
435-
if let Some(res) = self.resolver.partial_res_map.get(&id)
436+
if let Some(res) = self.resolver.general.partial_res_map.get(&id)
436437
&& let Some(Res::Local(sig_id)) = res.full_res()
437438
&& sig_id == self.path_id
438439
{
439440
let new_res = PartialRes::new(Res::Local(self.self_param_id));
440-
self.resolver.partial_res_map.insert(id, new_res);
441+
self.resolver.general.partial_res_map.insert(id, new_res);
441442
}
442443
}
443444
}
444445

445-
impl<'ast, 'a> Visitor<'ast> for SelfResolver<'a> {
446+
impl<'ast> Visitor<'ast> for SelfResolver<'_, '_> {
446447
fn visit_path(&mut self, path: &'ast Path, id: NodeId) {
447448
self.try_replace_id(id);
448449
visit::walk_path(self, path);

compiler/rustc_ast_lowering/src/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use super::errors::{
2424
UnderscoreExprLhsAssign,
2525
};
2626
use super::{
27-
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode, ResolverAstLoweringExt,
27+
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode,
2828
};
2929
use crate::errors::{InvalidLegacyConstGenericArg, UseConstGenericArg, YieldInClosure};
3030
use crate::{AllowReturnTypeNotation, FnDeclKind, ImplTraitPosition, fluent_generated};

compiler/rustc_ast_lowering/src/item.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use super::errors::{
2020
use super::stability::{enabled_names, gate_unstable_abi};
2121
use super::{
2222
AstOwner, FnDeclKind, ImplTraitContext, ImplTraitPosition, LoweringContext, ParamMode,
23-
ResolverAstLoweringExt,
2423
};
2524

2625
pub(super) struct ItemLowerer<'a, 'hir> {

compiler/rustc_ast_lowering/src/lib.rs

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ use rustc_hir::{
6060
TraitCandidate,
6161
};
6262
use rustc_index::{Idx, IndexSlice, IndexVec};
63-
use rustc_macros::extension;
6463
use rustc_middle::span_bug;
6564
use rustc_middle::ty::{PerOwnerResolverData, ResolverAstLowering, TyCtxt};
6665
use rustc_session::parse::{add_feature_diagnostics, feature_err};
@@ -94,7 +93,7 @@ rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
9493

9594
struct LoweringContext<'a, 'hir> {
9695
tcx: TyCtxt<'hir>,
97-
resolver: &'a mut ResolverAstLowering,
96+
resolver: PerOwnerResolver<'a>,
9897

9998
/// Used to allocate HIR nodes.
10099
arena: &'hir hir::Arena<'hir>,
@@ -126,7 +125,6 @@ struct LoweringContext<'a, 'hir> {
126125
is_in_dyn_type: bool,
127126

128127
current_hir_id_owner: hir::OwnerId,
129-
current_ast_id_owner: PerOwnerResolverData,
130128
item_local_id_counter: hir::ItemLocalId,
131129
trait_map: ItemLocalMap<Box<[TraitCandidate]>>,
132130

@@ -155,7 +153,10 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
155153
Self {
156154
// Pseudo-globals.
157155
tcx,
158-
resolver,
156+
resolver: PerOwnerResolver {
157+
general: resolver,
158+
item: PerOwnerResolverData::new(DUMMY_NODE_ID),
159+
},
159160
arena: tcx.hir_arena,
160161

161162
// HirId handling.
@@ -165,7 +166,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
165166
children: Vec::default(),
166167
contract_ensures: None,
167168
current_hir_id_owner: hir::CRATE_OWNER_ID,
168-
current_ast_id_owner: PerOwnerResolverData::new(DUMMY_NODE_ID),
169169
item_local_id_counter: hir::ItemLocalId::ZERO,
170170
ident_and_label_to_local_id: Default::default(),
171171
#[cfg(debug_assertions)]
@@ -204,8 +204,20 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
204204
}
205205
}
206206

207-
#[extension(trait ResolverAstLoweringExt)]
208-
impl ResolverAstLowering {
207+
pub(crate) struct PerOwnerResolver<'a> {
208+
pub general: &'a mut ResolverAstLowering,
209+
pub item: PerOwnerResolverData,
210+
}
211+
212+
impl<'a> std::ops::Deref for PerOwnerResolver<'a> {
213+
type Target = PerOwnerResolverData;
214+
215+
fn deref(&self) -> &Self::Target {
216+
&self.item
217+
}
218+
}
219+
220+
impl PerOwnerResolver<'_> {
209221
fn legacy_const_generic_args(&self, expr: &Expr) -> Option<Vec<usize>> {
210222
if let ExprKind::Path(None, path) = &expr.kind {
211223
// Don't perform legacy const generics rewriting if the path already
@@ -214,15 +226,17 @@ impl ResolverAstLowering {
214226
return None;
215227
}
216228

217-
if let Res::Def(DefKind::Fn, def_id) = self.partial_res_map.get(&expr.id)?.full_res()? {
229+
if let Res::Def(DefKind::Fn, def_id) =
230+
self.general.partial_res_map.get(&expr.id)?.full_res()?
231+
{
218232
// We only support cross-crate argument rewriting. Uses
219233
// within the same crate should be updated to use the new
220234
// const generics style.
221235
if def_id.is_local() {
222236
return None;
223237
}
224238

225-
if let Some(v) = self.legacy_const_generic_args.get(&def_id) {
239+
if let Some(v) = self.general.legacy_const_generic_args.get(&def_id) {
226240
return v.clone();
227241
}
228242
}
@@ -232,22 +246,22 @@ impl ResolverAstLowering {
232246
}
233247

234248
fn get_partial_res(&self, id: NodeId) -> Option<PartialRes> {
235-
self.partial_res_map.get(&id).copied()
249+
self.general.partial_res_map.get(&id).copied()
236250
}
237251

238252
/// Obtains per-namespace resolutions for `use` statement with the given `NodeId`.
239253
fn get_import_res(&self, id: NodeId) -> PerNS<Option<Res<NodeId>>> {
240-
self.import_res_map.get(&id).copied().unwrap_or_default()
254+
self.general.import_res_map.get(&id).copied().unwrap_or_default()
241255
}
242256

243257
/// Obtains resolution for a label with the given `NodeId`.
244258
fn get_label_res(&self, id: NodeId) -> Option<NodeId> {
245-
self.label_res_map.get(&id).copied()
259+
self.general.label_res_map.get(&id).copied()
246260
}
247261

248262
/// Obtains resolution for a lifetime with the given `NodeId`.
249263
fn get_lifetime_res(&self, id: NodeId) -> Option<LifetimeRes> {
250-
self.lifetimes_res_map.get(&id).copied()
264+
self.general.lifetimes_res_map.get(&id).copied()
251265
}
252266

253267
/// Obtain the list of lifetimes parameters to add to an item.
@@ -258,7 +272,7 @@ impl ResolverAstLowering {
258272
/// The extra lifetimes that appear from the parenthesized `Fn`-trait desugaring
259273
/// should appear at the enclosing `PolyTraitRef`.
260274
fn extra_lifetime_params(&self, id: NodeId) -> Vec<(Ident, NodeId, LifetimeRes)> {
261-
self.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default()
275+
self.general.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default()
262276
}
263277
}
264278

@@ -537,27 +551,27 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
537551
self.tcx.at(span).create_def(self.current_hir_id_owner.def_id, name, def_kind).def_id();
538552

539553
debug!("create_def: def_id_to_node_id[{:?}] <-> {:?}", def_id, node_id);
540-
self.current_ast_id_owner.node_id_to_def_id.insert(node_id, def_id);
554+
self.resolver.item.node_id_to_def_id.insert(node_id, def_id);
541555

542556
def_id
543557
}
544558

545559
fn next_node_id(&mut self) -> NodeId {
546-
let start = self.resolver.next_node_id;
560+
let start = self.resolver.general.next_node_id;
547561
let next = start.as_u32().checked_add(1).expect("input too large; ran out of NodeIds");
548-
self.resolver.next_node_id = ast::NodeId::from_u32(next);
562+
self.resolver.general.next_node_id = ast::NodeId::from_u32(next);
549563
start
550564
}
551565

552566
/// Given the id of some node in the AST, finds the `LocalDefId` associated with it by the name
553567
/// resolver (if any).
554568
fn opt_local_def_id(&self, node: NodeId) -> Option<LocalDefId> {
555-
self.current_ast_id_owner.node_id_to_def_id.get(&node).copied()
569+
self.resolver.item.node_id_to_def_id.get(&node).copied()
556570
}
557571

558572
fn local_def_id(&self, node: NodeId) -> LocalDefId {
559573
self.opt_local_def_id(node).unwrap_or_else(|| {
560-
self.resolver.owners.items().any(|(id, items)| {
574+
self.resolver.general.owners.items().any(|(id, items)| {
561575
items.node_id_to_def_id.items().any(|(node_id, def_id)| {
562576
if *node_id == node {
563577
panic!(
@@ -574,7 +588,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
574588

575589
/// Given the id of an owner node in the AST, returns the corresponding `OwnerId`.
576590
fn owner_id(&self, node: NodeId) -> hir::OwnerId {
577-
hir::OwnerId { def_id: self.resolver.owners[&node].node_id_to_def_id[&node] }
591+
hir::OwnerId { def_id: self.resolver.general.owners[&node].node_id_to_def_id[&node] }
578592
}
579593

580594
/// Freshen the `LoweringContext` and ready it to lower a nested item.
@@ -593,9 +607,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
593607
let current_attrs = std::mem::take(&mut self.attrs);
594608
let current_bodies = std::mem::take(&mut self.bodies);
595609
let current_define_opaque = std::mem::take(&mut self.define_opaque);
596-
let current_ast_owner = std::mem::replace(
597-
&mut self.current_ast_id_owner,
598-
self.resolver.owners.remove(&owner).unwrap(),
610+
let current_item_resolver = std::mem::replace(
611+
&mut self.resolver.item,
612+
self.resolver.general.owners.remove(&owner).unwrap(),
599613
);
600614
let current_ident_and_label_to_local_id =
601615
std::mem::take(&mut self.ident_and_label_to_local_id);
@@ -641,7 +655,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
641655
self.item_local_id_counter = current_local_counter;
642656
self.impl_trait_defs = current_impl_trait_defs;
643657
self.impl_trait_bounds = current_impl_trait_bounds;
644-
self.current_ast_id_owner = current_ast_owner;
658+
self.resolver.item = current_item_resolver;
645659

646660
debug_assert!(!self.children.iter().any(|(id, _)| id == &owner_id.def_id));
647661
self.children.push((owner_id.def_id, hir::MaybeOwner::Owner(info)));
@@ -694,7 +708,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
694708
self.children.push((def_id, hir::MaybeOwner::NonOwner(hir_id)));
695709
}
696710

697-
if let Some(traits) = self.resolver.trait_map.remove(&ast_node_id) {
711+
if let Some(traits) = self.resolver.general.trait_map.remove(&ast_node_id) {
698712
self.trait_map.insert(hir_id.local_id, traits.into_boxed_slice());
699713
}
700714

@@ -1646,7 +1660,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
16461660
inputs,
16471661
output,
16481662
c_variadic,
1649-
lifetime_elision_allowed: self.resolver.lifetime_elision_allowed.contains(&fn_node_id),
1663+
lifetime_elision_allowed: self
1664+
.resolver
1665+
.general
1666+
.lifetime_elision_allowed
1667+
.contains(&fn_node_id),
16501668
implicit_self: decl.inputs.get(0).map_or(hir::ImplicitSelfKind::None, |arg| {
16511669
let is_mutable_pat = matches!(
16521670
arg.pat.kind,

compiler/rustc_ast_lowering/src/pat.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use rustc_span::{DesugaringKind, Ident, Span};
1212
use super::errors::{
1313
ArbitraryExpressionInPattern, ExtraDoubleDot, MisplacedDoubleDot, SubTupleBinding,
1414
};
15-
use super::{ImplTraitContext, LoweringContext, ParamMode, ResolverAstLoweringExt};
15+
use super::{ImplTraitContext, LoweringContext, ParamMode};
1616
use crate::{AllowReturnTypeNotation, ImplTraitPosition};
1717

1818
impl<'a, 'hir> LoweringContext<'a, 'hir> {

compiler/rustc_ast_lowering/src/path.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use super::errors::{
1717
};
1818
use super::{
1919
AllowReturnTypeNotation, GenericArgsCtor, GenericArgsMode, ImplTraitContext, ImplTraitPosition,
20-
LifetimeRes, LoweringContext, ParamMode, ResolverAstLoweringExt,
20+
LifetimeRes, LoweringContext, ParamMode,
2121
};
2222

2323
impl<'a, 'hir> LoweringContext<'a, 'hir> {

0 commit comments

Comments
 (0)