Skip to content

Commit 0b7dd95

Browse files
committed
remove HirVisitor
Signed-off-by: Miguel Guarniz <[email protected]>
1 parent 885b90b commit 0b7dd95

File tree

2 files changed

+31
-43
lines changed

2 files changed

+31
-43
lines changed

compiler/rustc_passes/src/debugger_visualizer.rs

+4-10
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use std::sync::Arc;
1616
fn check_for_debugger_visualizer<'tcx>(
1717
tcx: TyCtxt<'tcx>,
1818
hir_id: HirId,
19-
debugger_visualizers: &mut FxHashSet<DebuggerVisualizerFile>
19+
debugger_visualizers: &mut FxHashSet<DebuggerVisualizerFile>,
2020
) {
2121
let attrs = tcx.hir().attrs(hir_id);
2222
for attr in attrs {
@@ -51,8 +51,7 @@ fn check_for_debugger_visualizer<'tcx>(
5151
let contents = match std::fs::read(&file) {
5252
Ok(contents) => contents,
5353
Err(err) => {
54-
tcx
55-
.sess
54+
tcx.sess
5655
.struct_span_err(
5756
attr.span,
5857
&format!(
@@ -71,12 +70,8 @@ fn check_for_debugger_visualizer<'tcx>(
7170
DebuggerVisualizerType::Natvis,
7271
));
7372
} else {
74-
tcx
75-
.sess
76-
.struct_span_err(
77-
attr.span,
78-
&format!("{} is not a valid file", file.display()),
79-
)
73+
tcx.sess
74+
.struct_span_err(attr.span, &format!("{} is not a valid file", file.display()))
8075
.emit();
8176
}
8277
}
@@ -101,7 +96,6 @@ fn debugger_visualizers<'tcx>(tcx: TyCtxt<'tcx>, cnum: CrateNum) -> Vec<Debugger
10196
// Collect debugger visualizers on the crate attributes.
10297
check_for_debugger_visualizer(tcx, CRATE_HIR_ID, &mut debugger_visualizers);
10398

104-
10599
// Extract out the found debugger_visualizer items.
106100
let mut visualizers = debugger_visualizers.into_iter().collect::<Vec<_>>();
107101

src/test/run-make-fulldeps/obtain-borrowck/driver.rs

+27-33
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ extern crate rustc_session;
2121
use rustc_borrowck::consumers::BodyWithBorrowckFacts;
2222
use rustc_driver::Compilation;
2323
use rustc_hir::def_id::LocalDefId;
24-
use rustc_hir::itemlikevisit::ItemLikeVisitor;
24+
use rustc_hir::def::DefKind;
2525
use rustc_interface::interface::Compiler;
2626
use rustc_interface::{Config, Queries};
2727
use rustc_middle::ty::query::query_values::mir_borrowck;
@@ -65,11 +65,34 @@ impl rustc_driver::Callbacks for CompilerCalls {
6565
queries.global_ctxt().unwrap().peek_mut().enter(|tcx| {
6666
// Collect definition ids of MIR bodies.
6767
let hir = tcx.hir();
68-
let mut visitor = HirVisitor { bodies: Vec::new() };
69-
hir.visit_all_item_likes(&mut visitor);
68+
let mut bodies = Vec::new();
69+
70+
let crate_items = tcx.hir_crate_items(());
71+
for id in crate_items.items() {
72+
if matches!(tcx.def_kind(id.def_id), DefKind::Fn) {
73+
bodies.push(id.def_id);
74+
}
75+
}
76+
77+
for id in crate_items.trait_items() {
78+
if matches!(tcx.def_kind(id.def_id), DefKind::AssocFn) {
79+
let trait_item = hir.trait_item(id);
80+
if let rustc_hir::TraitItemKind::Fn(_, trait_fn) = &trait_item.kind {
81+
if let rustc_hir::TraitFn::Provided(_) = trait_fn {
82+
bodies.push(trait_item.def_id);
83+
}
84+
}
85+
}
86+
}
87+
88+
for id in crate_items.impl_items() {
89+
if matches!(tcx.def_kind(id.def_id), DefKind::AssocFn) {
90+
bodies.push(id.def_id);
91+
}
92+
}
7093

7194
// Trigger borrow checking of all bodies.
72-
for def_id in visitor.bodies {
95+
for def_id in bodies {
7396
let _ = tcx.optimized_mir(def_id);
7497
}
7598

@@ -121,35 +144,6 @@ fn mir_borrowck<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> mir_borrowck<'tc
121144
original_mir_borrowck(tcx, def_id)
122145
}
123146

124-
/// Visitor that collects all body definition ids mentioned in the program.
125-
struct HirVisitor {
126-
bodies: Vec<LocalDefId>,
127-
}
128-
129-
impl<'tcx> ItemLikeVisitor<'tcx> for HirVisitor {
130-
fn visit_item(&mut self, item: &rustc_hir::Item) {
131-
if let rustc_hir::ItemKind::Fn(..) = item.kind {
132-
self.bodies.push(item.def_id);
133-
}
134-
}
135-
136-
fn visit_trait_item(&mut self, trait_item: &rustc_hir::TraitItem) {
137-
if let rustc_hir::TraitItemKind::Fn(_, trait_fn) = &trait_item.kind {
138-
if let rustc_hir::TraitFn::Provided(_) = trait_fn {
139-
self.bodies.push(trait_item.def_id);
140-
}
141-
}
142-
}
143-
144-
fn visit_impl_item(&mut self, impl_item: &rustc_hir::ImplItem) {
145-
if let rustc_hir::ImplItemKind::Fn(..) = impl_item.kind {
146-
self.bodies.push(impl_item.def_id);
147-
}
148-
}
149-
150-
fn visit_foreign_item(&mut self, _foreign_item: &rustc_hir::ForeignItem) {}
151-
}
152-
153147
/// Pull MIR bodies stored in the thread-local.
154148
fn get_bodies<'tcx>(tcx: TyCtxt<'tcx>) -> Vec<(String, BodyWithBorrowckFacts<'tcx>)> {
155149
MIR_BODIES.with(|state| {

0 commit comments

Comments
 (0)