diff options
| author | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2016-02-05 09:35:54 +0100 |
|---|---|---|
| committer | Oliver 'ker' Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2016-02-09 16:53:43 +0100 |
| commit | 4b067183baca48c0705c20d9d9570607b99f81a9 (patch) | |
| tree | d996ef96fb6acc619550eb26147078603c593a64 /src/librustc_plugin | |
| parent | 030b237476e1aef16dc01f3efef12d0dba765c07 (diff) | |
| download | rust-4b067183baca48c0705c20d9d9570607b99f81a9.tar.gz rust-4b067183baca48c0705c20d9d9570607b99f81a9.zip | |
Allow registering MIR-passes through compiler plugins
Diffstat (limited to 'src/librustc_plugin')
| -rw-r--r-- | src/librustc_plugin/lib.rs | 1 | ||||
| -rw-r--r-- | src/librustc_plugin/registry.rs | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/librustc_plugin/lib.rs b/src/librustc_plugin/lib.rs index c55e97412bb..464899d5d4f 100644 --- a/src/librustc_plugin/lib.rs +++ b/src/librustc_plugin/lib.rs @@ -71,6 +71,7 @@ extern crate rustc; extern crate rustc_front; extern crate rustc_metadata; +extern crate rustc_mir; pub use self::registry::Registry; diff --git a/src/librustc_plugin/registry.rs b/src/librustc_plugin/registry.rs index 3138d7fa1db..a51fd58db88 100644 --- a/src/librustc_plugin/registry.rs +++ b/src/librustc_plugin/registry.rs @@ -13,6 +13,8 @@ use rustc::lint::{EarlyLintPassObject, LateLintPassObject, LintId, Lint}; use rustc::session::Session; +use rustc::mir::transform::MirPass; + use syntax::ext::base::{SyntaxExtension, NamedSyntaxExtension, NormalTT}; use syntax::ext::base::{IdentTT, MultiModifier, MultiDecorator}; use syntax::ext::base::{MacroExpanderFn, MacroRulesTT}; @@ -54,6 +56,9 @@ pub struct Registry<'a> { pub late_lint_passes: Vec<LateLintPassObject>, #[doc(hidden)] + pub mir_passes: Vec<Box<MirPass>>, + + #[doc(hidden)] pub lint_groups: HashMap<&'static str, Vec<LintId>>, #[doc(hidden)] @@ -76,6 +81,7 @@ impl<'a> Registry<'a> { lint_groups: HashMap::new(), llvm_passes: vec!(), attributes: vec!(), + mir_passes: Vec::new(), } } @@ -134,6 +140,11 @@ impl<'a> Registry<'a> { self.lint_groups.insert(name, to.into_iter().map(|x| LintId::of(x)).collect()); } + /// Register a MIR pass + pub fn register_mir_pass(&mut self, pass: Box<MirPass>) { + self.mir_passes.push(pass); + } + /// Register an LLVM pass. /// /// Registration with LLVM itself is handled through static C++ objects with |
