about summary refs log tree commit diff
path: root/src/librustc_plugin
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2016-02-05 09:35:54 +0100
committerOliver 'ker' Schneider <git-spam-no-reply9815368754983@oli-obk.de>2016-02-09 16:53:43 +0100
commit4b067183baca48c0705c20d9d9570607b99f81a9 (patch)
treed996ef96fb6acc619550eb26147078603c593a64 /src/librustc_plugin
parent030b237476e1aef16dc01f3efef12d0dba765c07 (diff)
downloadrust-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.rs1
-rw-r--r--src/librustc_plugin/registry.rs11
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