Skip to content

Commit 9e5b099

Browse files
split for_each_child into immutable and mutable versions
1 parent 01c1623 commit 9e5b099

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
@@ -1104,7 +1104,7 @@ impl<'a, 'ra, 'tcx> BuildReducedGraphVisitor<'a, 'ra, 'tcx> {
11041104
if let Some(span) = import_all {
11051105
let import = macro_use_import(self, span, false);
11061106
self.r.potentially_unused_imports.push(import);
1107-
module.for_each_child(self, |this, ident, ns, binding| {
1107+
module.for_each_child_mut(self, |this, ident, ns, binding| {
11081108
if ns == MacroNS {
11091109
let import = if this.r.is_accessible_from(binding.vis, this.parent_scope.module)
11101110
{

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
@@ -652,7 +652,7 @@ impl<'ra> ModuleData<'ra> {
652652
}
653653

654654
impl<'ra> Module<'ra> {
655-
fn for_each_child<'tcx, R, F>(self, resolver: &mut R, mut f: F)
655+
fn for_each_child_mut<'tcx, R, F>(self, resolver: &mut R, mut f: F)
656656
where
657657
R: AsMut<Resolver<'ra, 'tcx>>,
658658
F: FnMut(&mut R, Ident, Namespace, NameBinding<'ra>),
@@ -664,10 +664,22 @@ impl<'ra> Module<'ra> {
664664
}
665665
}
666666

667+
fn for_each_child<'tcx, R, F>(self, resolver: &R, mut f: F)
668+
where
669+
R: AsRef<Resolver<'ra, 'tcx>>,
670+
F: FnMut(&R, Ident, Namespace, NameBinding<'ra>),
671+
{
672+
for (key, name_resolution) in resolver.as_ref().resolutions(self).borrow().iter() {
673+
if let Some(binding) = name_resolution.borrow().binding {
674+
f(resolver, key.ident, key.ns, binding);
675+
}
676+
}
677+
}
678+
667679
/// This modifies `self` in place. The traits will be stored in `self.traits`.
668-
fn ensure_traits<'tcx, R>(self, resolver: &mut R)
680+
fn ensure_traits<'tcx, R>(self, resolver: &R)
669681
where
670-
R: AsMut<Resolver<'ra, 'tcx>>,
682+
R: AsRef<Resolver<'ra, 'tcx>>,
671683
{
672684
let mut traits = self.traits.borrow_mut();
673685
if traits.is_none() {
@@ -677,7 +689,7 @@ impl<'ra> Module<'ra> {
677689
return;
678690
}
679691
if let Res::Def(DefKind::Trait | DefKind::TraitAlias, def_id) = binding.res() {
680-
collected_traits.push((name, binding, r.as_mut().get_module(def_id)))
692+
collected_traits.push((name, binding, r.as_ref().get_module(def_id)))
681693
}
682694
});
683695
*traits = Some(collected_traits.into_boxed_slice());
@@ -1341,6 +1353,12 @@ impl<'ra, 'tcx> AsMut<Resolver<'ra, 'tcx>> for Resolver<'ra, 'tcx> {
13411353
}
13421354
}
13431355

1356+
impl<'ra, 'tcx> AsRef<Resolver<'ra, 'tcx>> for Resolver<'ra, 'tcx> {
1357+
fn as_ref(&self) -> &Resolver<'ra, 'tcx> {
1358+
self
1359+
}
1360+
}
1361+
13441362
impl<'tcx> Resolver<'_, 'tcx> {
13451363
fn opt_local_def_id(&self, node: NodeId) -> Option<LocalDefId> {
13461364
self.opt_feed(node).map(|f| f.key())
@@ -1867,7 +1885,7 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
18671885
// We don't reject trait aliases (`trait_module == None`) because we don't have access to their
18681886
// associated items.
18691887
fn trait_may_have_item(
1870-
&mut self,
1888+
&self,
18711889
trait_module: Option<Module<'ra>>,
18721890
assoc_item: Option<(Symbol, Namespace)>,
18731891
) -> 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)