diff options
| author | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-10-07 18:10:41 -0400 |
|---|---|---|
| committer | Mark Rousskov <mark.simulacrum@gmail.com> | 2019-10-17 19:16:41 -0400 |
| commit | 24545128ebf7e19536e1384f64b89a18742471b0 (patch) | |
| tree | 8d73444f13a19ba82065f161899a1cfca6a219c0 | |
| parent | 7fef39791a093681c59f08181f96a0a2d63ab981 (diff) | |
| download | rust-24545128ebf7e19536e1384f64b89a18742471b0.tar.gz rust-24545128ebf7e19536e1384f64b89a18742471b0.zip | |
Take lint passes as constructor functions
| -rw-r--r-- | src/librustc/lint/context.rs | 16 | ||||
| -rw-r--r-- | src/librustc_lint/lib.rs | 9 | ||||
| -rw-r--r-- | src/librustc_plugin/registry.rs | 8 | ||||
| -rw-r--r-- | src/test/ui-fulldeps/auxiliary/lint-for-crate.rs | 3 | ||||
| -rw-r--r-- | src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr | 1 |
5 files changed, 19 insertions, 18 deletions
diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 373ee2568a4..73d8bb11b71 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -168,20 +168,20 @@ impl LintStore { .collect() } - pub fn register_early_pass(&mut self, pass: EarlyLintPassObject) { - self.early_passes.as_mut().unwrap().push(pass); + pub fn register_early_pass(&mut self, pass: fn() -> EarlyLintPassObject) { + self.early_passes.as_mut().unwrap().push((pass)()); } - pub fn register_pre_expansion_pass(&mut self, pass: EarlyLintPassObject) { - self.pre_expansion_passes.as_mut().unwrap().push(pass); + pub fn register_pre_expansion_pass(&mut self, pass: fn() -> EarlyLintPassObject) { + self.pre_expansion_passes.as_mut().unwrap().push((pass)()); } - pub fn register_late_pass(&mut self, pass: LateLintPassObject) { - self.late_passes.lock().as_mut().unwrap().push(pass); + pub fn register_late_pass(&mut self, pass: fn() -> LateLintPassObject) { + self.late_passes.lock().as_mut().unwrap().push((pass)()); } - pub fn register_late_mod_pass(&mut self, pass: LateLintPassObject) { - self.late_module_passes.push(pass); + pub fn register_late_mod_pass(&mut self, pass: fn() -> LateLintPassObject) { + self.late_module_passes.push((pass)()); } // Helper method for register_early/late_pass diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 752396188af..0026c2317d1 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -205,9 +205,8 @@ pub fn register_builtins(store: &mut lint::LintStore, no_interleave_lints: bool) macro_rules! register_pass { ($method:ident, $ty:ident, $constructor:expr) => ( - let obj = box $constructor; store.register_lints(&$ty::get_lints()); - store.$method(obj); + store.$method(|| box $constructor); ) } @@ -487,11 +486,11 @@ pub fn register_builtins(store: &mut lint::LintStore, no_interleave_lints: bool) pub fn register_internals(store: &mut lint::LintStore) { store.register_lints(&DefaultHashTypes::get_lints()); - store.register_early_pass(box DefaultHashTypes::new()); + store.register_early_pass(|| box DefaultHashTypes::new()); store.register_lints(&LintPassImpl::get_lints()); - store.register_early_pass(box LintPassImpl); + store.register_early_pass(|| box LintPassImpl); store.register_lints(&TyTyKind::get_lints()); - store.register_late_pass(box TyTyKind); + store.register_late_pass(|| box TyTyKind); store.register_group( false, "rustc::internal", diff --git a/src/librustc_plugin/registry.rs b/src/librustc_plugin/registry.rs index a8076b57c86..44318bf06aa 100644 --- a/src/librustc_plugin/registry.rs +++ b/src/librustc_plugin/registry.rs @@ -36,10 +36,10 @@ pub struct Registry<'a> { pub syntax_exts: Vec<NamedSyntaxExtension>, #[doc(hidden)] - pub early_lint_passes: Vec<EarlyLintPassObject>, + pub early_lint_passes: Vec<fn() -> EarlyLintPassObject>, #[doc(hidden)] - pub late_lint_passes: Vec<LateLintPassObject>, + pub late_lint_passes: Vec<fn() -> LateLintPassObject>, #[doc(hidden)] pub lints: Vec<&'static Lint>, @@ -109,12 +109,12 @@ impl<'a> Registry<'a> { } /// Register a compiler lint pass. - pub fn register_early_lint_pass(&mut self, lint_pass: EarlyLintPassObject) { + pub fn register_early_lint_pass(&mut self, lint_pass: fn() -> EarlyLintPassObject) { self.early_lint_passes.push(lint_pass); } /// Register a compiler lint pass. - pub fn register_late_lint_pass(&mut self, lint_pass: LateLintPassObject) { + pub fn register_late_lint_pass(&mut self, lint_pass: fn() -> LateLintPassObject) { self.late_lint_passes.push(lint_pass); } /// Register a lint group. diff --git a/src/test/ui-fulldeps/auxiliary/lint-for-crate.rs b/src/test/ui-fulldeps/auxiliary/lint-for-crate.rs index 000e10392e8..ba5b5d1906a 100644 --- a/src/test/ui-fulldeps/auxiliary/lint-for-crate.rs +++ b/src/test/ui-fulldeps/auxiliary/lint-for-crate.rs @@ -32,5 +32,6 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Pass { #[plugin_registrar] pub fn plugin_registrar(reg: &mut Registry) { - reg.register_late_lint_pass(box Pass); + reg.register_lint(&[&CRATE_NOT_OKAY]); + reg.register_late_lint_pass(|| box Pass); } diff --git a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr index b7cff343395..0dbdf4f5aa9 100644 --- a/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr +++ b/src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr @@ -23,3 +23,4 @@ LL | custom_lint_pass_macro!(); = help: try using `declare_lint_pass!` or `impl_lint_pass!` instead error: aborting due to 2 previous errors + |
