Skip to content

Commit 2454512

Browse files
Take lint passes as constructor functions
1 parent 7fef397 commit 2454512

File tree

5 files changed

+19
-18
lines changed

5 files changed

+19
-18
lines changed

src/librustc/lint/context.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -168,20 +168,20 @@ impl LintStore {
168168
.collect()
169169
}
170170

171-
pub fn register_early_pass(&mut self, pass: EarlyLintPassObject) {
172-
self.early_passes.as_mut().unwrap().push(pass);
171+
pub fn register_early_pass(&mut self, pass: fn() -> EarlyLintPassObject) {
172+
self.early_passes.as_mut().unwrap().push((pass)());
173173
}
174174

175-
pub fn register_pre_expansion_pass(&mut self, pass: EarlyLintPassObject) {
176-
self.pre_expansion_passes.as_mut().unwrap().push(pass);
175+
pub fn register_pre_expansion_pass(&mut self, pass: fn() -> EarlyLintPassObject) {
176+
self.pre_expansion_passes.as_mut().unwrap().push((pass)());
177177
}
178178

179-
pub fn register_late_pass(&mut self, pass: LateLintPassObject) {
180-
self.late_passes.lock().as_mut().unwrap().push(pass);
179+
pub fn register_late_pass(&mut self, pass: fn() -> LateLintPassObject) {
180+
self.late_passes.lock().as_mut().unwrap().push((pass)());
181181
}
182182

183-
pub fn register_late_mod_pass(&mut self, pass: LateLintPassObject) {
184-
self.late_module_passes.push(pass);
183+
pub fn register_late_mod_pass(&mut self, pass: fn() -> LateLintPassObject) {
184+
self.late_module_passes.push((pass)());
185185
}
186186

187187
// Helper method for register_early/late_pass

src/librustc_lint/lib.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,8 @@ pub fn register_builtins(store: &mut lint::LintStore, no_interleave_lints: bool)
205205

206206
macro_rules! register_pass {
207207
($method:ident, $ty:ident, $constructor:expr) => (
208-
let obj = box $constructor;
209208
store.register_lints(&$ty::get_lints());
210-
store.$method(obj);
209+
store.$method(|| box $constructor);
211210
)
212211
}
213212

@@ -487,11 +486,11 @@ pub fn register_builtins(store: &mut lint::LintStore, no_interleave_lints: bool)
487486

488487
pub fn register_internals(store: &mut lint::LintStore) {
489488
store.register_lints(&DefaultHashTypes::get_lints());
490-
store.register_early_pass(box DefaultHashTypes::new());
489+
store.register_early_pass(|| box DefaultHashTypes::new());
491490
store.register_lints(&LintPassImpl::get_lints());
492-
store.register_early_pass(box LintPassImpl);
491+
store.register_early_pass(|| box LintPassImpl);
493492
store.register_lints(&TyTyKind::get_lints());
494-
store.register_late_pass(box TyTyKind);
493+
store.register_late_pass(|| box TyTyKind);
495494
store.register_group(
496495
false,
497496
"rustc::internal",

src/librustc_plugin/registry.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ pub struct Registry<'a> {
3636
pub syntax_exts: Vec<NamedSyntaxExtension>,
3737

3838
#[doc(hidden)]
39-
pub early_lint_passes: Vec<EarlyLintPassObject>,
39+
pub early_lint_passes: Vec<fn() -> EarlyLintPassObject>,
4040

4141
#[doc(hidden)]
42-
pub late_lint_passes: Vec<LateLintPassObject>,
42+
pub late_lint_passes: Vec<fn() -> LateLintPassObject>,
4343

4444
#[doc(hidden)]
4545
pub lints: Vec<&'static Lint>,
@@ -109,12 +109,12 @@ impl<'a> Registry<'a> {
109109
}
110110

111111
/// Register a compiler lint pass.
112-
pub fn register_early_lint_pass(&mut self, lint_pass: EarlyLintPassObject) {
112+
pub fn register_early_lint_pass(&mut self, lint_pass: fn() -> EarlyLintPassObject) {
113113
self.early_lint_passes.push(lint_pass);
114114
}
115115

116116
/// Register a compiler lint pass.
117-
pub fn register_late_lint_pass(&mut self, lint_pass: LateLintPassObject) {
117+
pub fn register_late_lint_pass(&mut self, lint_pass: fn() -> LateLintPassObject) {
118118
self.late_lint_passes.push(lint_pass);
119119
}
120120
/// Register a lint group.

src/test/ui-fulldeps/auxiliary/lint-for-crate.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,6 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for Pass {
3232

3333
#[plugin_registrar]
3434
pub fn plugin_registrar(reg: &mut Registry) {
35-
reg.register_late_lint_pass(box Pass);
35+
reg.register_lint(&[&CRATE_NOT_OKAY]);
36+
reg.register_late_lint_pass(|| box Pass);
3637
}

src/test/ui-fulldeps/internal-lints/lint_pass_impl_without_macro.stderr

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,3 +23,4 @@ LL | custom_lint_pass_macro!();
2323
= help: try using `declare_lint_pass!` or `impl_lint_pass!` instead
2424

2525
error: aborting due to 2 previous errors
26+

0 commit comments

Comments
 (0)