Skip to content

Commit 253410f

Browse files
split for_each_child into immutable and mutable versions
1 parent 4a9cbb1 commit 253410f

File tree

6 files changed

+31
-13
lines changed

6 files changed

+31
-13
lines changed

compiler/rustc_expand/src/base.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1144,7 +1144,7 @@ pub trait ResolverExpand {
11441144

11451145
/// Names of specific methods to which glob delegation expands.
11461146
fn glob_delegation_suffixes(
1147-
&mut self,
1147+
&self,
11481148
trait_def_id: DefId,
11491149
impl_def_id: LocalDefId,
11501150
) -> Result<Vec<(Ident, Option<Ident>)>, Indeterminate>;

compiler/rustc_resolve/src/build_reduced_graph.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1103,7 +1103,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
11031103
if let Some(span) = import_all {
11041104
let import = macro_use_import(self, span, false);
11051105
self.r.potentially_unused_imports.push(import);
1106-
module.for_each_child(self, |this, ident, ns, binding| {
1106+
module.for_each_child_mut(self, |this, ident, ns, binding| {
11071107
if ns == MacroNS {
11081108
let import = if this.r.is_accessible_from(binding.vis, this.parent_scope.module)
11091109
{

compiler/rustc_resolve/src/diagnostics.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
523523
}
524524

525525
pub(crate) fn add_module_candidates(
526-
&mut self,
526+
&self,
527527
module: Module<'ra>,
528528
names: &mut Vec<TypoSuggestion>,
529529
filter_fn: &impl Fn(Res) -> bool,
@@ -1155,7 +1155,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
11551155
}
11561156

11571157
fn lookup_import_candidates_from_module<FilterFn>(
1158-
&mut self,
1158+
&self,
11591159
lookup_ident: Ident,
11601160
namespace: Namespace,
11611161
parent_scope: &ParentScope<'ra>,

compiler/rustc_resolve/src/late/diagnostics.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2629,7 +2629,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
26292629
false
26302630
}
26312631

2632-
fn find_module(&mut self, def_id: DefId) -> Option<(Module<'ra>, ImportSuggestion)> {
2632+
fn find_module(&self, def_id: DefId) -> Option<(Module<'ra>, ImportSuggestion)> {
26332633
let mut result = None;
26342634
let mut seen_modules = FxHashSet::default();
26352635
let root_did = self.r.graph_root.def_id();
@@ -2686,7 +2686,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
26862686
result
26872687
}
26882688

2689-
fn collect_enum_ctors(&mut self, def_id: DefId) -> Option<Vec<(Path, DefId, CtorKind)>> {
2689+
fn collect_enum_ctors(&self, def_id: DefId) -> Option<Vec<(Path, DefId, CtorKind)>> {
26902690
self.find_module(def_id).map(|(enum_module, enum_import_suggestion)| {
26912691
let mut variants = Vec::new();
26922692
enum_module.for_each_child(self.r, |_, ident, _, name_binding| {
@@ -2703,7 +2703,7 @@ impl<'ast, 'ra, 'tcx> LateResolutionVisitor<'_, 'ast, 'ra, 'tcx> {
27032703

27042704
/// Adds a suggestion for using an enum's variant when an enum is used instead.
27052705
fn suggest_using_enum_variant(
2706-
&mut self,
2706+
&self,
27072707
err: &mut Diag<'_>,
27082708
source: PathSource<'_, '_, '_>,
27092709
def_id: DefId,

compiler/rustc_resolve/src/lib.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ impl<'ra> ModuleData<'ra> {
641641
}
642642

643643
impl<'ra> Module<'ra> {
644-
fn for_each_child<'tcx, R, F>(self, resolver: &mut R, mut f: F)
644+
fn for_each_child_mut<'tcx, R, F>(self, resolver: &mut R, mut f: F)
645645
where
646646
R: AsMut<Resolver<'ra, 'tcx>>,
647647
F: FnMut(&mut R, Ident, Namespace, NameBinding<'ra>),
@@ -653,10 +653,22 @@ impl<'ra> Module<'ra> {
653653
}
654654
}
655655

656+
fn for_each_child<'tcx, R, F>(self, resolver: &R, mut f: F)
657+
where
658+
R: AsRef<Resolver<'ra, 'tcx>>,
659+
F: FnMut(&R, Ident, Namespace, NameBinding<'ra>),
660+
{
661+
for (key, name_resolution) in resolver.as_ref().resolutions(self).borrow().iter() {
662+
if let Some(binding) = name_resolution.borrow().binding {
663+
f(resolver, key.ident, key.ns, binding);
664+
}
665+
}
666+
}
667+
656668
/// This modifies `self` in place. The traits will be stored in `self.traits`.
657-
fn ensure_traits<'tcx, R>(self, resolver: &mut R)
669+
fn ensure_traits<'tcx, R>(self, resolver: &R)
658670
where
659-
R: AsMut<Resolver<'ra, 'tcx>>,
671+
R: AsRef<Resolver<'ra, 'tcx>>,
660672
{
661673
let mut traits = self.traits.borrow_mut();
662674
if traits.is_none() {
@@ -666,7 +678,7 @@ impl<'ra> Module<'ra> {
666678
return;
667679
}
668680
if let Res::Def(DefKind::Trait | DefKind::TraitAlias, def_id) = binding.res() {
669-
collected_traits.push((name, binding, r.as_mut().get_module(def_id)))
681+
collected_traits.push((name, binding, r.as_ref().get_module(def_id)))
670682
}
671683
});
672684
*traits = Some(collected_traits.into_boxed_slice());
@@ -1332,6 +1344,12 @@ impl<'ra, 'tcx> AsMut<Resolver<'ra, 'tcx>> for Resolver<'ra, 'tcx> {
13321344
}
13331345
}
13341346

1347+
impl<'ra, 'tcx> AsRef<Resolver<'ra, 'tcx>> for Resolver<'ra, 'tcx> {
1348+
fn as_ref(&self) -> &Resolver<'ra, 'tcx> {
1349+
self
1350+
}
1351+
}
1352+
13351353
impl<'tcx> Resolver<'_, 'tcx> {
13361354
fn opt_local_def_id(&self, node: NodeId) -> Option<LocalDefId> {
13371355
self.opt_feed(node).map(|f| f.key())
@@ -1859,7 +1877,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
18591877
// We don't reject trait aliases (`trait_module == None`) because we don't have access to their
18601878
// associated items.
18611879
fn trait_may_have_item(
1862-
&mut self,
1880+
&self,
18631881
trait_module: Option<Module<'ra>>,
18641882
assoc_item: Option<(Symbol, Namespace)>,
18651883
) -> bool {

compiler/rustc_resolve/src/macros.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,7 @@ impl<'ra, 'tcx> ResolverExpand for Resolver<'ra, 'tcx> {
506506
}
507507

508508
fn glob_delegation_suffixes(
509-
&mut self,
509+
&self,
510510
trait_def_id: DefId,
511511
impl_def_id: LocalDefId,
512512
) -> Result<Vec<(Ident, Option<Ident>)>, Indeterminate> {

0 commit comments

Comments
 (0)