Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions compiler/rustc_ast_lowering/src/asm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@ use super::errors::{
InvalidRegisterClass, RegisterClassOnlyClobber, RegisterClassOnlyClobberStable,
RegisterConflict,
};
use crate::{
AllowReturnTypeNotation, ImplTraitContext, ImplTraitPosition, ParamMode, ResolverAstLoweringExt,
};
use crate::{AllowReturnTypeNotation, ImplTraitContext, ImplTraitPosition, ParamMode};

impl<'a, 'hir> LoweringContext<'a, 'hir> {
pub(crate) fn lower_inline_asm(
Expand Down
31 changes: 16 additions & 15 deletions compiler/rustc_ast_lowering/src/delegation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,15 +50,15 @@ use rustc_hir::Target;
use rustc_hir::attrs::{AttributeKind, InlineAttr};
use rustc_hir::def_id::{DefId, LocalDefId};
use rustc_middle::span_bug;
use rustc_middle::ty::{Asyncness, DelegationAttrs, DelegationFnSigAttrs, ResolverAstLowering};
use rustc_middle::ty::{Asyncness, DelegationAttrs, DelegationFnSigAttrs};
use rustc_span::symbol::kw;
use rustc_span::{DUMMY_SP, Ident, Span, Symbol};
use smallvec::SmallVec;
use {rustc_ast as ast, rustc_hir as hir};

use super::{GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode};
use crate::errors::{CycleInDelegationSignatureResolution, UnresolvedDelegationCallee};
use crate::{AllowReturnTypeNotation, ImplTraitPosition, ResolverAstLoweringExt};
use crate::{AllowReturnTypeNotation, ImplTraitPosition, PerOwnerResolver};

pub(crate) struct DelegationResults<'hir> {
pub body_id: hir::BodyId,
Expand Down Expand Up @@ -136,6 +136,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
DefKind::AssocFn => match def_id.as_local() {
Some(local_def_id) => self
.resolver
.general
.delegation_fn_sigs
.get(&local_def_id)
.is_some_and(|sig| sig.has_self),
Expand All @@ -154,7 +155,7 @@ impl<'hir> LoweringContext<'_, 'hir> {

// Delegation can be unresolved in illegal places such as function bodies in extern blocks (see #151356)
let ids = if let Some(delegation_info) =
self.resolver.delegation_infos.get(&self.local_def_id(item_id))
self.resolver.general.delegation_infos.get(&self.local_def_id(item_id))
{
self.get_delegation_ids(delegation_info.resolution_node, span)
} else {
Expand Down Expand Up @@ -306,10 +307,10 @@ impl<'hir> LoweringContext<'_, 'hir> {

fn get_attrs(&self, local_id: LocalDefId) -> &DelegationAttrs {
// local_id can correspond either to a function or other delegation
if let Some(fn_sig) = self.resolver.delegation_fn_sigs.get(&local_id) {
if let Some(fn_sig) = self.resolver.general.delegation_fn_sigs.get(&local_id) {
&fn_sig.attrs
} else {
&self.resolver.delegation_infos[&local_id].attrs
&self.resolver.general.delegation_infos[&local_id].attrs
}
}

Expand Down Expand Up @@ -340,7 +341,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
// it means that we refer to another delegation as a callee, so in order to obtain
// a signature DefId we obtain NodeId of the callee delegation and try to get signature from it.
if let Some(local_id) = def_id.as_local()
&& let Some(delegation_info) = self.resolver.delegation_infos.get(&local_id)
&& let Some(delegation_info) = self.resolver.general.delegation_infos.get(&local_id)
{
node_id = delegation_info.resolution_node;
if visited.contains(&node_id) {
Expand Down Expand Up @@ -374,7 +375,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
// Function parameter count, including C variadic `...` if present.
fn param_count(&self, def_id: DefId) -> (usize, bool /*c_variadic*/) {
if let Some(local_sig_id) = def_id.as_local() {
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
Some(sig) => (sig.param_count, sig.c_variadic),
None => (0, false),
}
Expand Down Expand Up @@ -422,7 +423,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
span: Span,
) -> hir::FnSig<'hir> {
let header = if let Some(local_sig_id) = sig_id.as_local() {
match self.resolver.delegation_fn_sigs.get(&local_sig_id) {
match self.resolver.general.delegation_fn_sigs.get(&local_sig_id) {
Some(sig) => {
let parent = self.tcx.parent(sig_id);
// HACK: we override the default safety instead of generating attributes from the ether.
Expand Down Expand Up @@ -531,7 +532,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&& idx == 0
{
let mut self_resolver = SelfResolver {
resolver: this.resolver,
resolver: &mut this.resolver,
path_id: delegation.id,
self_param_id: pat_node_id,
};
Expand Down Expand Up @@ -711,25 +712,25 @@ impl<'hir> LoweringContext<'_, 'hir> {
}
}

struct SelfResolver<'a> {
resolver: &'a mut ResolverAstLowering,
struct SelfResolver<'a, 'b> {
resolver: &'b mut PerOwnerResolver<'a>,
path_id: NodeId,
self_param_id: NodeId,
}

impl<'a> SelfResolver<'a> {
impl SelfResolver<'_, '_> {
fn try_replace_id(&mut self, id: NodeId) {
if let Some(res) = self.resolver.partial_res_map.get(&id)
if let Some(res) = self.resolver.general.partial_res_map.get(&id)
&& let Some(Res::Local(sig_id)) = res.full_res()
&& sig_id == self.path_id
{
let new_res = PartialRes::new(Res::Local(self.self_param_id));
self.resolver.partial_res_map.insert(id, new_res);
self.resolver.general.partial_res_map.insert(id, new_res);
}
}
}

impl<'ast, 'a> Visitor<'ast> for SelfResolver<'a> {
impl<'ast> Visitor<'ast> for SelfResolver<'_, '_> {
fn visit_id(&mut self, id: NodeId) {
self.try_replace_id(id);
}
Expand Down
4 changes: 1 addition & 3 deletions compiler/rustc_ast_lowering/src/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,7 @@ use super::errors::{
InclusiveRangeWithNoEnd, MatchArmWithNoBody, NeverPatternWithBody, NeverPatternWithGuard,
UnderscoreExprLhsAssign,
};
use super::{
GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode, ResolverAstLoweringExt,
};
use super::{GenericArgsMode, ImplTraitContext, LoweringContext, ParamMode};
use crate::errors::{InvalidLegacyConstGenericArg, UseConstGenericArg, YieldInClosure};
use crate::{AllowReturnTypeNotation, FnDeclKind, ImplTraitPosition, TryBlockScope};

Expand Down
7 changes: 5 additions & 2 deletions compiler/rustc_ast_lowering/src/item.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use super::errors::{InvalidAbi, InvalidAbiSuggestion, TupleStructWithDefault, Un
use super::stability::{enabled_names, gate_unstable_abi};
use super::{
AstOwner, FnDeclKind, ImplTraitContext, ImplTraitPosition, LoweringContext, ParamMode,
RelaxedBoundForbiddenReason, RelaxedBoundPolicy, ResolverAstLoweringExt,
RelaxedBoundForbiddenReason, RelaxedBoundPolicy,
};

pub(super) struct ItemLowerer<'a, 'hir> {
Expand Down Expand Up @@ -77,7 +77,10 @@ impl<'a, 'hir> ItemLowerer<'a, 'hir> {
match node {
AstOwner::NonOwner => {}
AstOwner::Crate(c) => {
assert_eq!(self.resolver.node_id_to_def_id[&CRATE_NODE_ID], CRATE_DEF_ID);
assert_eq!(
self.resolver.owners[&CRATE_NODE_ID].node_id_to_def_id[&CRATE_NODE_ID],
CRATE_DEF_ID
);
self.with_lctx(CRATE_NODE_ID, |lctx| {
let module = lctx.lower_mod(&c.items, &c.spans);
// FIXME(jdonszelman): is dummy span ever a problem here?
Expand Down
Loading
Loading