about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMiguel Guarniz <mi9uel9@gmail.com>2022-04-06 19:04:15 -0400
committerMiguel Guarniz <mi9uel9@gmail.com>2022-04-08 11:59:59 -0400
commit0baf85e8b6588ea24af710c981c91930e01f5a19 (patch)
treedd8b7d16c9116b81bb9a977fddbaf5605782da99
parentb73b4de982a16e8819e804cb648ff3ea63d22028 (diff)
downloadrust-0baf85e8b6588ea24af710c981c91930e01f5a19.tar.gz
rust-0baf85e8b6588ea24af710c981c91930e01f5a19.zip
remove some uses of visit_all_item_likes in incremental, metadata and interface crates
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
-rw-r--r--compiler/rustc_incremental/src/persist/dirty_clean.rs23
-rw-r--r--compiler/rustc_interface/src/proc_macro_decls.rs9
-rw-r--r--compiler/rustc_metadata/src/foreign_modules.rs13
-rw-r--r--compiler/rustc_metadata/src/native_libs.rs5
-rw-r--r--compiler/rustc_metadata/src/rmeta/encoder.rs6
-rw-r--r--compiler/rustc_middle/src/hir/mod.rs15
6 files changed, 64 insertions, 7 deletions
diff --git a/compiler/rustc_incremental/src/persist/dirty_clean.rs b/compiler/rustc_incremental/src/persist/dirty_clean.rs
index 8a4ed02f6ae..49697be51eb 100644
--- a/compiler/rustc_incremental/src/persist/dirty_clean.rs
+++ b/compiler/rustc_incremental/src/persist/dirty_clean.rs
@@ -147,7 +147,28 @@ pub fn check_dirty_clean_annotations(tcx: TyCtxt<'_>) {
 
     tcx.dep_graph.with_ignore(|| {
         let mut dirty_clean_visitor = DirtyCleanVisitor { tcx, checked_attrs: Default::default() };
-        tcx.hir().visit_all_item_likes(&mut dirty_clean_visitor);
+
+        let crate_items = tcx.hir_crate_items(());
+
+        for id in crate_items.items() {
+            let item = tcx.hir().item(id);
+            dirty_clean_visitor.check_item(item.def_id, item.span);
+        }
+
+        for id in crate_items.trait_items() {
+            let item = tcx.hir().trait_item(id);
+            dirty_clean_visitor.check_item(item.def_id, item.span);
+        }
+
+        for id in crate_items.impl_items() {
+            let item = tcx.hir().impl_item(id);
+            dirty_clean_visitor.check_item(item.def_id, item.span);
+        }
+
+        for id in crate_items.foreign_items() {
+            let item = tcx.hir().foreign_item(id);
+            dirty_clean_visitor.check_item(item.def_id, item.span);
+        }
 
         let mut all_attrs = FindAllAttrs { tcx, found_attrs: vec![] };
         tcx.hir().walk_attributes(&mut all_attrs);
diff --git a/compiler/rustc_interface/src/proc_macro_decls.rs b/compiler/rustc_interface/src/proc_macro_decls.rs
index c0316ce58d2..d0b895643c5 100644
--- a/compiler/rustc_interface/src/proc_macro_decls.rs
+++ b/compiler/rustc_interface/src/proc_macro_decls.rs
@@ -7,7 +7,14 @@ use rustc_span::symbol::sym;
 
 fn proc_macro_decls_static(tcx: TyCtxt<'_>, (): ()) -> Option<LocalDefId> {
     let mut finder = Finder { tcx, decls: None };
-    tcx.hir().visit_all_item_likes(&mut finder);
+
+    for id in tcx.hir().items() {
+        let item = tcx.hir().item(id);
+        let attrs = finder.tcx.hir().attrs(item.hir_id());
+        if finder.tcx.sess.contains_name(attrs, sym::rustc_proc_macro_decls) {
+            finder.decls = Some(item.hir_id());
+        }
+    }
 
     finder.decls.map(|id| tcx.hir().local_def_id(id))
 }
diff --git a/compiler/rustc_metadata/src/foreign_modules.rs b/compiler/rustc_metadata/src/foreign_modules.rs
index c4ee1e19128..cb961d4d605 100644
--- a/compiler/rustc_metadata/src/foreign_modules.rs
+++ b/compiler/rustc_metadata/src/foreign_modules.rs
@@ -4,9 +4,16 @@ use rustc_middle::ty::TyCtxt;
 use rustc_session::cstore::ForeignModule;
 
 crate fn collect(tcx: TyCtxt<'_>) -> Vec<ForeignModule> {
-    let mut collector = Collector { modules: Vec::new() };
-    tcx.hir().visit_all_item_likes(&mut collector);
-    collector.modules
+    let mut modules = Vec::new();
+    for id in tcx.hir().items() {
+        let item = tcx.hir().item(id);
+        let hir::ItemKind::ForeignMod { items, .. } = item.kind else {
+            continue;
+        };
+        let foreign_items = items.iter().map(|it| it.id.def_id.to_def_id()).collect();
+        modules.push(ForeignModule { foreign_items, def_id: id.def_id.to_def_id() });
+    }
+    modules
 }
 
 struct Collector {
diff --git a/compiler/rustc_metadata/src/native_libs.rs b/compiler/rustc_metadata/src/native_libs.rs
index 1cbfb0bd554..547c4876cb8 100644
--- a/compiler/rustc_metadata/src/native_libs.rs
+++ b/compiler/rustc_metadata/src/native_libs.rs
@@ -15,7 +15,10 @@ use rustc_target::spec::abi::Abi;
 
 crate fn collect(tcx: TyCtxt<'_>) -> Vec<NativeLib> {
     let mut collector = Collector { tcx, libs: Vec::new() };
-    tcx.hir().visit_all_item_likes(&mut collector);
+    for id in tcx.hir().items() {
+        let item = tcx.hir().item(id);
+        collector.visit_item(item);
+    }
     collector.process_command_line();
     collector.libs
 }
diff --git a/compiler/rustc_metadata/src/rmeta/encoder.rs b/compiler/rustc_metadata/src/rmeta/encoder.rs
index 6c758b8e5b6..6ad7a342bdc 100644
--- a/compiler/rustc_metadata/src/rmeta/encoder.rs
+++ b/compiler/rustc_metadata/src/rmeta/encoder.rs
@@ -1784,7 +1784,11 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
         empty_proc_macro!(self);
         let tcx = self.tcx;
         let mut visitor = ImplsVisitor { tcx, impls: FxHashMap::default() };
-        tcx.hir().visit_all_item_likes(&mut visitor);
+
+        for id in tcx.hir().items() {
+            let item = tcx.hir().item(id);
+            visitor.visit_item(item);
+        }
 
         let mut all_impls: Vec<_> = visitor.impls.into_iter().collect();
 
diff --git a/compiler/rustc_middle/src/hir/mod.rs b/compiler/rustc_middle/src/hir/mod.rs
index fcce2d005d7..039e9953814 100644
--- a/compiler/rustc_middle/src/hir/mod.rs
+++ b/compiler/rustc_middle/src/hir/mod.rs
@@ -45,6 +45,21 @@ pub struct ModuleItems {
     foreign_items: Box<[ForeignItemId]>,
 }
 
+impl ModuleItems {
+    pub fn items(&self) -> impl Iterator<Item = ItemId> {
+        self.items.to_vec().into_iter()
+    }
+    pub fn trait_items(&self) -> impl Iterator<Item = TraitItemId> {
+        self.trait_items.to_vec().into_iter()
+    }
+    pub fn impl_items(&self) -> impl Iterator<Item = ImplItemId> {
+        self.impl_items.to_vec().into_iter()
+    }
+    pub fn foreign_items(&self) -> impl Iterator<Item = ForeignItemId> {
+        self.foreign_items.to_vec().into_iter()
+    }
+}
+
 impl<'tcx> TyCtxt<'tcx> {
     #[inline(always)]
     pub fn hir(self) -> map::Map<'tcx> {