diff options
| author | bors <bors@rust-lang.org> | 2022-04-17 08:06:53 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-04-17 08:06:53 +0000 |
| commit | edba28277038f24ee80b88b66e054ec33facefa4 (patch) | |
| tree | 66aa0b39634acf3f80162389109c7d01e741f6e3 /compiler/rustc_interface | |
| parent | ac8b11810f4a0def3596ee401feb9ef00015b555 (diff) | |
| parent | 88108bd5d9832a9286b899dc7c8916a9bd104711 (diff) | |
| download | rust-edba28277038f24ee80b88b66e054ec33facefa4.tar.gz rust-edba28277038f24ee80b88b66e054ec33facefa4.zip | |
Auto merge of #95655 - kckeiks:create-hir-crate-items-query, r=cjgillot
Refactor HIR item-like traversal (part 1) Issue #95004 - Create hir_crate_items query which traverses tcx.hir_crate(()).owners to return a hir::ModuleItems - use tcx.hir_crate_items in tcx.hir().items() to return an iterator of hir::ItemId - use tcx.hir_crate_items to introduce a tcx.hir().par_items(impl Fn(hir::ItemId)) to traverse all items in parallel; Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com> cc `@cjgillot`
Diffstat (limited to 'compiler/rustc_interface')
| -rw-r--r-- | compiler/rustc_interface/src/proc_macro_decls.rs | 28 |
1 files changed, 9 insertions, 19 deletions
diff --git a/compiler/rustc_interface/src/proc_macro_decls.rs b/compiler/rustc_interface/src/proc_macro_decls.rs index c0316ce58d2..5371c513d29 100644 --- a/compiler/rustc_interface/src/proc_macro_decls.rs +++ b/compiler/rustc_interface/src/proc_macro_decls.rs @@ -1,35 +1,25 @@ use rustc_hir as hir; use rustc_hir::def_id::LocalDefId; -use rustc_hir::itemlikevisit::ItemLikeVisitor; use rustc_middle::ty::query::Providers; use rustc_middle::ty::TyCtxt; 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); - finder.decls.map(|id| tcx.hir().local_def_id(id)) -} - -struct Finder<'tcx> { - tcx: TyCtxt<'tcx>, - decls: Option<hir::HirId>, -} - -impl<'v> ItemLikeVisitor<'v> for Finder<'_> { - fn visit_item(&mut self, item: &hir::Item<'_>) { - let attrs = self.tcx.hir().attrs(item.hir_id()); - if self.tcx.sess.contains_name(attrs, sym::rustc_proc_macro_decls) { - self.decls = Some(item.hir_id()); + for id in tcx.hir().items() { + let attrs = finder.tcx.hir().attrs(id.hir_id()); + if finder.tcx.sess.contains_name(attrs, sym::rustc_proc_macro_decls) { + finder.decls = Some(id.def_id); } } - fn visit_trait_item(&mut self, _trait_item: &hir::TraitItem<'_>) {} - - fn visit_impl_item(&mut self, _impl_item: &hir::ImplItem<'_>) {} + finder.decls +} - fn visit_foreign_item(&mut self, _foreign_item: &hir::ForeignItem<'_>) {} +struct Finder<'tcx> { + tcx: TyCtxt<'tcx>, + decls: Option<hir::def_id::LocalDefId>, } pub(crate) fn provide(providers: &mut Providers) { |
