Skip to content

Commit 0ef16fe

Browse files
committed
remove OuterVisitor
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
1 parent b1f0209 commit 0ef16fe

File tree

1 file changed

+52
-39
lines changed

1 file changed

+52
-39
lines changed

compiler/rustc_passes/src/hir_id_validator.rs

Lines changed: 52 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use rustc_data_structures::sync::Lock;
33
use rustc_hir as hir;
44
use rustc_hir::def_id::{LocalDefId, CRATE_DEF_ID};
55
use rustc_hir::intravisit;
6-
use rustc_hir::itemlikevisit::ItemLikeVisitor;
6+
use rustc_hir::intravisit::Visitor;
77
use rustc_hir::{HirId, ItemLocalId};
88
use rustc_middle::hir::map::Map;
99
use rustc_middle::hir::nested_filter;
@@ -20,8 +20,30 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
2020
let hir_map = tcx.hir();
2121

2222
hir_map.par_for_each_module(|module_id| {
23-
hir_map
24-
.visit_item_likes_in_module(module_id, &mut OuterVisitor { hir_map, errors: &errors })
23+
let mut v = HirIdValidator {
24+
hir_map,
25+
owner: None,
26+
hir_ids_seen: Default::default(),
27+
errors: &errors,
28+
};
29+
30+
let module = tcx.hir_module_items(module_id);
31+
32+
for id in module.items() {
33+
v.visit_item(tcx.hir().item(id))
34+
}
35+
36+
for id in module.trait_items() {
37+
v.visit_trait_item(tcx.hir().trait_item(id))
38+
}
39+
40+
for id in module.impl_items() {
41+
v.visit_impl_item(tcx.hir().impl_item(id))
42+
}
43+
44+
for id in module.foreign_items() {
45+
v.visit_foreign_item(tcx.hir().foreign_item(id))
46+
}
2547
});
2648

2749
let errors = errors.into_inner();
@@ -39,45 +61,16 @@ struct HirIdValidator<'a, 'hir> {
3961
errors: &'a Lock<Vec<String>>,
4062
}
4163

42-
struct OuterVisitor<'a, 'hir> {
43-
hir_map: Map<'hir>,
44-
errors: &'a Lock<Vec<String>>,
45-
}
46-
47-
impl<'a, 'hir> OuterVisitor<'a, 'hir> {
48-
fn new_inner_visitor(&self, hir_map: Map<'hir>) -> HirIdValidator<'a, 'hir> {
64+
impl<'a, 'hir> HirIdValidator<'a, 'hir> {
65+
fn new_visitor(&self, hir_map: Map<'hir>) -> HirIdValidator<'a, 'hir> {
4966
HirIdValidator {
5067
hir_map,
5168
owner: None,
5269
hir_ids_seen: Default::default(),
5370
errors: self.errors,
5471
}
5572
}
56-
}
57-
58-
impl<'a, 'hir> ItemLikeVisitor<'hir> for OuterVisitor<'a, 'hir> {
59-
fn visit_item(&mut self, i: &'hir hir::Item<'hir>) {
60-
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
61-
inner_visitor.check(i.def_id, |this| intravisit::walk_item(this, i));
62-
}
63-
64-
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem<'hir>) {
65-
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
66-
inner_visitor.check(i.def_id, |this| intravisit::walk_trait_item(this, i));
67-
}
68-
69-
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
70-
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
71-
inner_visitor.check(i.def_id, |this| intravisit::walk_impl_item(this, i));
72-
}
73-
74-
fn visit_foreign_item(&mut self, i: &'hir hir::ForeignItem<'hir>) {
75-
let mut inner_visitor = self.new_inner_visitor(self.hir_map);
76-
inner_visitor.check(i.def_id, |this| intravisit::walk_foreign_item(this, i));
77-
}
78-
}
7973

80-
impl<'a, 'hir> HirIdValidator<'a, 'hir> {
8174
#[cold]
8275
#[inline(never)]
8376
fn error(&self, f: impl FnOnce() -> String) {
@@ -146,6 +139,11 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
146139
self.hir_map
147140
}
148141

142+
fn visit_item(&mut self, i: &'hir hir::Item<'hir>) {
143+
let mut inner_visitor = self.new_visitor(self.hir_map);
144+
inner_visitor.check(i.def_id, |this| intravisit::walk_item(this, i));
145+
}
146+
149147
fn visit_id(&mut self, hir_id: HirId) {
150148
let owner = self.owner.expect("no owner");
151149

@@ -163,11 +161,19 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
163161
self.hir_ids_seen.insert(hir_id.local_id);
164162
}
165163

166-
fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef) {
167-
// Explicitly do nothing here. ImplItemRefs contain hir::Visibility
168-
// values that actually belong to an ImplItem instead of the ItemKind::Impl
169-
// we are currently in. So for those it's correct that they have a
170-
// different owner.
164+
fn visit_foreign_item(&mut self, i: &'hir hir::ForeignItem<'hir>) {
165+
let mut inner_visitor = self.new_visitor(self.hir_map);
166+
inner_visitor.check(i.def_id, |this| intravisit::walk_foreign_item(this, i));
167+
}
168+
169+
fn visit_trait_item(&mut self, i: &'hir hir::TraitItem<'hir>) {
170+
let mut inner_visitor = self.new_visitor(self.hir_map);
171+
inner_visitor.check(i.def_id, |this| intravisit::walk_trait_item(this, i));
172+
}
173+
174+
fn visit_impl_item(&mut self, i: &'hir hir::ImplItem<'hir>) {
175+
let mut inner_visitor = self.new_visitor(self.hir_map);
176+
inner_visitor.check(i.def_id, |this| intravisit::walk_impl_item(this, i));
171177
}
172178

173179
fn visit_foreign_item_ref(&mut self, _: &'hir hir::ForeignItemRef) {
@@ -176,4 +182,11 @@ impl<'a, 'hir> intravisit::Visitor<'hir> for HirIdValidator<'a, 'hir> {
176182
// we are currently in. So for those it's correct that they have a
177183
// different owner.
178184
}
185+
186+
fn visit_impl_item_ref(&mut self, _: &'hir hir::ImplItemRef) {
187+
// Explicitly do nothing here. ImplItemRefs contain hir::Visibility
188+
// values that actually belong to an ImplItem instead of the ItemKind::Impl
189+
// we are currently in. So for those it's correct that they have a
190+
// different owner.
191+
}
179192
}

0 commit comments

Comments
 (0)