Skip to content

Commit 8fcd278

Browse files
committed
Replace extension trait with wrapper struct
1 parent d36c447 commit 8fcd278

File tree

7 files changed

+42
-36
lines changed

7 files changed

+42
-36
lines changed

compiler/rustc_ast_lowering/src/asm.rs

+1-1
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

+12-11
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, Symbol};
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,
@@ -82,6 +82,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
8282
DefKind::AssocFn => match def_id.as_local() {
8383
Some(local_def_id) => self
8484
.resolver
85+
.general
8586
.delegation_fn_sigs
8687
.get(&local_def_id)
8788
.is_some_and(|sig| sig.has_self),
@@ -150,7 +151,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
150151
if let Some(local_sig_id) = sig_id.as_local() {
151152
// Map may be filled incorrectly due to recursive delegation.
152153
// Error will be emitted later during HIR ty lowering.
153-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
154+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
154155
Some(sig) => (sig.param_count, sig.c_variadic),
155156
None => (0, false),
156157
}
@@ -198,7 +199,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
198199
span: Span,
199200
) -> hir::FnSig<'hir> {
200201
let header = if let Some(local_sig_id) = sig_id.as_local() {
201-
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
202+
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
202203
Some(sig) => {
203204
let parent = self.tcx.parent(sig_id);
204205
// HACK: we override the default safety instead of generating attributes from the ether.
@@ -281,7 +282,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
281282
&& idx == 0
282283
{
283284
let mut self_resolver = SelfResolver {
284-
resolver: this.resolver,
285+
resolver: &mut this.resolver,
285286
path_id: delegation.id,
286287
self_param_id: pat_node_id,
287288
};
@@ -427,25 +428,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
427428
}
428429
}
429430

430-
struct SelfResolver<'a> {
431-
resolver: &'a mut ResolverAstLowering,
431+
struct SelfResolver<'a, 'b> {
432+
resolver: &'b mut PerOwnerResolver<'a>,
432433
path_id: NodeId,
433434
self_param_id: NodeId,
434435
}
435436

436-
impl<'a> SelfResolver<'a> {
437+
impl SelfResolver<'_, '_> {
437438
fn try_replace_id(&mut self, id: NodeId) {
438-
if let Some(res) = self.resolver.partial_res_map.get(&id)
439+
if let Some(res) = self.resolver.general.partial_res_map.get(&id)
439440
&& let Some(Res::Local(sig_id)) = res.full_res()
440441
&& sig_id == self.path_id
441442
{
442443
let new_res = PartialRes::new(Res::Local(self.self_param_id));
443-
self.resolver.partial_res_map.insert(id, new_res);
444+
self.resolver.general.partial_res_map.insert(id, new_res);
444445
}
445446
}
446447
}
447448

448-
impl<'ast, 'a> Visitor<'ast> for SelfResolver<'a> {
449+
impl<'ast> Visitor<'ast> for SelfResolver<'_, '_> {
449450
fn visit_path(&mut self, path: &'ast Path, id: NodeId) {
450451
self.try_replace_id(id);
451452
visit::walk_path(self, path);

compiler/rustc_ast_lowering/src/expr.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ use super::errors::{
2323
InclusiveRangeWithNoEnd, MatchArmWithNoBody, NeverPatternWithBody, NeverPatternWithGuard,
2424
UnderscoreExprLhsAssign,
2525
};
26-
use super::{
27-
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode, ResolverAstLoweringExt,
28-
};
26+
use super::{GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode};
2927
use crate::errors::{InvalidLegacyConstGenericArg, UseConstGenericArg, YieldInClosure};
3028
use crate::{AllowReturnTypeNotation, FnDeclKind, ImplTraitPosition, fluent_generated};
3129

compiler/rustc_ast_lowering/src/item.rs

-1
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

+26-18
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ use rustc_hir::{
5858
TraitCandidate,
5959
};
6060
use rustc_index::{Idx, IndexSlice, IndexVec};
61-
use rustc_macros::extension;
6261
use rustc_middle::span_bug;
6362
use rustc_middle::ty::{ResolverAstLowering, TyCtxt};
6463
use rustc_session::parse::{add_feature_diagnostics, feature_err};
@@ -92,7 +91,7 @@ rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
9291

9392
struct LoweringContext<'a, 'hir> {
9493
tcx: TyCtxt<'hir>,
95-
resolver: &'a mut ResolverAstLowering,
94+
resolver: PerOwnerResolver<'a>,
9695

9796
/// Used to allocate HIR nodes.
9897
arena: &'hir hir::Arena<'hir>,
@@ -152,7 +151,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
152151
Self {
153152
// Pseudo-globals.
154153
tcx,
155-
resolver,
154+
resolver: PerOwnerResolver { general: resolver },
156155
arena: tcx.hir_arena,
157156

158157
// HirId handling.
@@ -200,8 +199,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
200199
}
201200
}
202201

203-
#[extension(trait ResolverAstLoweringExt)]
204-
impl ResolverAstLowering {
202+
pub(crate) struct PerOwnerResolver<'a> {
203+
pub general: &'a mut ResolverAstLowering,
204+
}
205+
206+
impl PerOwnerResolver<'_> {
205207
fn legacy_const_generic_args(&self, expr: &Expr) -> Option<Vec<usize>> {
206208
if let ExprKind::Path(None, path) = &expr.kind {
207209
// Don't perform legacy const generics rewriting if the path already
@@ -210,15 +212,17 @@ impl ResolverAstLowering {
210212
return None;
211213
}
212214

213-
if let Res::Def(DefKind::Fn, def_id) = self.partial_res_map.get(&expr.id)?.full_res()? {
215+
if let Res::Def(DefKind::Fn, def_id) =
216+
self.general.partial_res_map.get(&expr.id)?.full_res()?
217+
{
214218
// We only support cross-crate argument rewriting. Uses
215219
// within the same crate should be updated to use the new
216220
// const generics style.
217221
if def_id.is_local() {
218222
return None;
219223
}
220224

221-
if let Some(v) = self.legacy_const_generic_args.get(&def_id) {
225+
if let Some(v) = self.general.legacy_const_generic_args.get(&def_id) {
222226
return v.clone();
223227
}
224228
}
@@ -228,22 +232,22 @@ impl ResolverAstLowering {
228232
}
229233

230234
fn get_partial_res(&self, id: NodeId) -> Option<PartialRes> {
231-
self.partial_res_map.get(&id).copied()
235+
self.general.partial_res_map.get(&id).copied()
232236
}
233237

234238
/// Obtains per-namespace resolutions for `use` statement with the given `NodeId`.
235239
fn get_import_res(&self, id: NodeId) -> PerNS<Option<Res<NodeId>>> {
236-
self.import_res_map.get(&id).copied().unwrap_or_default()
240+
self.general.import_res_map.get(&id).copied().unwrap_or_default()
237241
}
238242

239243
/// Obtains resolution for a label with the given `NodeId`.
240244
fn get_label_res(&self, id: NodeId) -> Option<NodeId> {
241-
self.label_res_map.get(&id).copied()
245+
self.general.label_res_map.get(&id).copied()
242246
}
243247

244248
/// Obtains resolution for a lifetime with the given `NodeId`.
245249
fn get_lifetime_res(&self, id: NodeId) -> Option<LifetimeRes> {
246-
self.lifetimes_res_map.get(&id).copied()
250+
self.general.lifetimes_res_map.get(&id).copied()
247251
}
248252

249253
/// Obtain the list of lifetimes parameters to add to an item.
@@ -254,7 +258,7 @@ impl ResolverAstLowering {
254258
/// The extra lifetimes that appear from the parenthesized `Fn`-trait desugaring
255259
/// should appear at the enclosing `PolyTraitRef`.
256260
fn extra_lifetime_params(&self, id: NodeId) -> Vec<(Ident, NodeId, LifetimeRes)> {
257-
self.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default()
261+
self.general.extra_lifetime_params_map.get(&id).cloned().unwrap_or_default()
258262
}
259263
}
260264

@@ -513,22 +517,22 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
513517
self.tcx.at(span).create_def(self.current_hir_id_owner.def_id, name, def_kind).def_id();
514518

515519
debug!("create_def: def_id_to_node_id[{:?}] <-> {:?}", def_id, node_id);
516-
self.resolver.node_id_to_def_id.insert(node_id, def_id);
520+
self.resolver.general.node_id_to_def_id.insert(node_id, def_id);
517521

518522
def_id
519523
}
520524

521525
fn next_node_id(&mut self) -> NodeId {
522-
let start = self.resolver.next_node_id;
526+
let start = self.resolver.general.next_node_id;
523527
let next = start.as_u32().checked_add(1).expect("input too large; ran out of NodeIds");
524-
self.resolver.next_node_id = ast::NodeId::from_u32(next);
528+
self.resolver.general.next_node_id = ast::NodeId::from_u32(next);
525529
start
526530
}
527531

528532
/// Given the id of some node in the AST, finds the `LocalDefId` associated with it by the name
529533
/// resolver (if any).
530534
fn opt_local_def_id(&self, node: NodeId) -> Option<LocalDefId> {
531-
self.resolver.node_id_to_def_id.get(&node).copied()
535+
self.resolver.general.node_id_to_def_id.get(&node).copied()
532536
}
533537

534538
fn local_def_id(&self, node: NodeId) -> LocalDefId {
@@ -652,7 +656,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
652656
self.children.push((def_id, hir::MaybeOwner::NonOwner(hir_id)));
653657
}
654658

655-
if let Some(traits) = self.resolver.trait_map.remove(&ast_node_id) {
659+
if let Some(traits) = self.resolver.general.trait_map.remove(&ast_node_id) {
656660
self.trait_map.insert(hir_id.local_id, traits.into_boxed_slice());
657661
}
658662

@@ -1599,7 +1603,11 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
15991603
inputs,
16001604
output,
16011605
c_variadic,
1602-
lifetime_elision_allowed: self.resolver.lifetime_elision_allowed.contains(&fn_node_id),
1606+
lifetime_elision_allowed: self
1607+
.resolver
1608+
.general
1609+
.lifetime_elision_allowed
1610+
.contains(&fn_node_id),
16031611
implicit_self: decl.inputs.get(0).map_or(hir::ImplicitSelfKind::None, |arg| {
16041612
let is_mutable_pat = matches!(
16051613
arg.pat.kind,

compiler/rustc_ast_lowering/src/pat.rs

+1-1
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

+1-1
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)