summaryrefslogtreecommitdiff
path: root/compiler/rustc_plugin_impl
diff options
context:
space:
mode:
authorCamille GILLOT <gillot.camille@gmail.com>2021-05-11 12:07:14 +0200
committerCamille GILLOT <gillot.camille@gmail.com>2021-05-12 13:58:43 +0200
commite9e1900af7eea8ec67fdc763291a085323b6c7af (patch)
tree1555ba17685b26426682b080386d63f8606b6de4 /compiler/rustc_plugin_impl
parent829a9d33a9f08ecdf52f95b07da5e355c3d3966d (diff)
downloadrust-e9e1900af7eea8ec67fdc763291a085323b6c7af.tar.gz
Use () for plugin_registrar_fn.
Diffstat (limited to 'compiler/rustc_plugin_impl')
-rw-r--r--compiler/rustc_plugin_impl/src/build.rs38
1 files changed, 15 insertions, 23 deletions
diff --git a/compiler/rustc_plugin_impl/src/build.rs b/compiler/rustc_plugin_impl/src/build.rs
index a49afa35e46..b95c4a72019 100644
--- a/compiler/rustc_plugin_impl/src/build.rs
+++ b/compiler/rustc_plugin_impl/src/build.rs
@@ -1,7 +1,7 @@
//! Used by `rustc` when compiling a plugin crate.
use rustc_hir as hir;
-use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, LOCAL_CRATE};
+use rustc_hir::def_id::LocalDefId;
use rustc_hir::itemlikevisit::ItemLikeVisitor;
use rustc_middle::ty::query::Providers;
use rustc_middle::ty::TyCtxt;
@@ -31,33 +31,25 @@ impl<'v, 'tcx> ItemLikeVisitor<'v> for RegistrarFinder<'tcx> {
}
/// Finds the function marked with `#[plugin_registrar]`, if any.
-pub fn find_plugin_registrar(tcx: TyCtxt<'_>) -> Option<DefId> {
- tcx.plugin_registrar_fn(LOCAL_CRATE)
-}
-
-fn plugin_registrar_fn(tcx: TyCtxt<'_>, cnum: CrateNum) -> Option<DefId> {
- assert_eq!(cnum, LOCAL_CRATE);
-
+fn plugin_registrar_fn(tcx: TyCtxt<'_>, (): ()) -> Option<LocalDefId> {
let mut finder = RegistrarFinder { tcx, registrars: Vec::new() };
tcx.hir().krate().visit_all_item_likes(&mut finder);
- match finder.registrars.len() {
- 0 => None,
- 1 => {
- let (def_id, _) = finder.registrars.pop().unwrap();
- Some(def_id.to_def_id())
- }
- _ => {
- let diagnostic = tcx.sess.diagnostic();
- let mut e = diagnostic.struct_err("multiple plugin registration functions found");
- for &(_, span) in &finder.registrars {
- e.span_note(span, "one is here");
- }
- e.emit();
- diagnostic.abort_if_errors();
- unreachable!();
+ let (def_id, span) = finder.registrars.pop()?;
+
+ if !finder.registrars.is_empty() {
+ let diagnostic = tcx.sess.diagnostic();
+ let mut e = diagnostic.struct_err("multiple plugin registration functions found");
+ e.span_note(span, "one is here");
+ for &(_, span) in &finder.registrars {
+ e.span_note(span, "one is here");
}
+ e.emit();
+ diagnostic.abort_if_errors();
+ unreachable!();
}
+
+ Some(def_id)
}
pub fn provide(providers: &mut Providers) {