about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>2016-02-05 09:35:00 +0100
committerOliver 'ker' Schneider <git-spam-no-reply9815368754983@oli-obk.de>2016-02-09 16:53:42 +0100
commit030b237476e1aef16dc01f3efef12d0dba765c07 (patch)
tree25102c57cbd237dae74c383f988ed3416d0f4ca5 /src
parent41c892f5e141a4bd34252ec46f3b9debc3cdafdd (diff)
downloadrust-030b237476e1aef16dc01f3efef12d0dba765c07.tar.gz
rust-030b237476e1aef16dc01f3efef12d0dba765c07.zip
refactor `MirPass` to always require a tcx
Diffstat (limited to 'src')
-rw-r--r--src/librustc/lib.rs1
-rw-r--r--src/librustc/mir/transform.rs16
-rw-r--r--src/librustc_mir/mir_map.rs5
-rw-r--r--src/librustc_mir/transform/erase_regions.rs24
-rw-r--r--src/librustc_mir/transform/mod.rs6
-rw-r--r--src/librustc_mir/transform/simplify_cfg.rs6
6 files changed, 36 insertions, 22 deletions
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index 92cebb48b69..53fd867e7fd 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -126,6 +126,7 @@ pub mod mir {
     pub mod repr;
     pub mod tcx;
     pub mod visit;
+    pub mod transform;
     pub mod mir_map;
 }
 
diff --git a/src/librustc/mir/transform.rs b/src/librustc/mir/transform.rs
new file mode 100644
index 00000000000..0f18d8d2821
--- /dev/null
+++ b/src/librustc/mir/transform.rs
@@ -0,0 +1,16 @@
+// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use mir::repr::Mir;
+use middle::ty::ctxt;
+
+pub trait MirPass {
+    fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, tcx: &ctxt<'tcx>);
+}
diff --git a/src/librustc_mir/mir_map.rs b/src/librustc_mir/mir_map.rs
index f7a0642fd97..0e641bf679d 100644
--- a/src/librustc_mir/mir_map.rs
+++ b/src/librustc_mir/mir_map.rs
@@ -22,12 +22,13 @@ extern crate rustc_front;
 use build;
 use graphviz;
 use pretty;
-use transform::{simplify_cfg, MirPass};
+use transform::simplify_cfg;
 use rustc::dep_graph::DepNode;
 use rustc::mir::repr::Mir;
 use hair::cx::Cx;
 use std::fs::File;
 
+use rustc::mir::transform::MirPass;
 use rustc::mir::mir_map::MirMap;
 use rustc::middle::infer;
 use rustc::middle::region::CodeExtentData;
@@ -147,7 +148,7 @@ impl<'a, 'm, 'tcx> Visitor<'tcx> for InnerDump<'a,'m,'tcx> {
 
         match build_mir(Cx::new(&infcx), implicit_arg_tys, id, span, decl, body) {
             Ok(mut mir) => {
-                simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir);
+                simplify_cfg::SimplifyCfg::new().run_on_mir(&mut mir, self.tcx);
 
                 let meta_item_list = self.attr
                                          .iter()
diff --git a/src/librustc_mir/transform/erase_regions.rs b/src/librustc_mir/transform/erase_regions.rs
index 0f0317b6b19..b927ab489f1 100644
--- a/src/librustc_mir/transform/erase_regions.rs
+++ b/src/librustc_mir/transform/erase_regions.rs
@@ -15,24 +15,26 @@
 use rustc::middle::ty;
 use rustc::mir::repr::*;
 use rustc::mir::visit::MutVisitor;
-use transform::MirPass;
 use rustc::mir::mir_map::MirMap;
+use rustc::mir::transform::MirPass;
 
 pub fn erase_regions<'tcx>(tcx: &ty::ctxt<'tcx>, mir_map: &mut MirMap<'tcx>) {
-    let mut eraser = EraseRegions::new(tcx);
+    let mut eraser = EraseRegions;
 
-        eraser.run_on_mir(mir);
     for (_, mir) in &mut mir_map.map {
+        eraser.run_on_mir(mir, tcx);
     }
 }
 
-pub struct EraseRegions<'a, 'tcx: 'a> {
+pub struct EraseRegions;
+
+struct EraseRegionsVisitor<'a, 'tcx: 'a> {
     tcx: &'a ty::ctxt<'tcx>,
 }
 
-impl<'a, 'tcx> EraseRegions<'a, 'tcx> {
-    pub fn new(tcx: &'a ty::ctxt<'tcx>) -> EraseRegions<'a, 'tcx> {
-        EraseRegions {
+impl<'a, 'tcx> EraseRegionsVisitor<'a, 'tcx> {
+    pub fn new(tcx: &'a ty::ctxt<'tcx>) -> Self {
+        EraseRegionsVisitor {
             tcx: tcx
         }
     }
@@ -56,13 +58,13 @@ impl<'a, 'tcx> EraseRegions<'a, 'tcx> {
     }
 }
 
-impl<'a, 'tcx> MirPass<'tcx> for EraseRegions<'a, 'tcx> {
-    fn run_on_mir(&mut self, mir: &mut Mir<'tcx>) {
-        self.visit_mir(mir);
+impl MirPass for EraseRegions {
+    fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, tcx: &ty::ctxt<'tcx>) {
+        EraseRegionsVisitor::new(tcx).visit_mir(mir);
     }
 }
 
-impl<'a, 'tcx> MutVisitor<'tcx> for EraseRegions<'a, 'tcx> {
+impl<'a, 'tcx> MutVisitor<'tcx> for EraseRegionsVisitor<'a, 'tcx> {
     fn visit_mir(&mut self, mir: &mut Mir<'tcx>) {
         self.erase_regions_return_ty(&mut mir.return_ty);
         self.erase_regions_tys(mir.var_decls.iter_mut().map(|d| &mut d.ty));
diff --git a/src/librustc_mir/transform/mod.rs b/src/librustc_mir/transform/mod.rs
index 174718f7b16..41ea4469734 100644
--- a/src/librustc_mir/transform/mod.rs
+++ b/src/librustc_mir/transform/mod.rs
@@ -11,9 +11,3 @@
 pub mod simplify_cfg;
 pub mod erase_regions;
 mod util;
-
-use rustc::mir::repr::Mir;
-
-pub trait MirPass<'tcx> {
-    fn run_on_mir(&mut self, mir: &mut Mir<'tcx>);
-}
diff --git a/src/librustc_mir/transform/simplify_cfg.rs b/src/librustc_mir/transform/simplify_cfg.rs
index 9d4c73b90f8..17c5b5f7c3c 100644
--- a/src/librustc_mir/transform/simplify_cfg.rs
+++ b/src/librustc_mir/transform/simplify_cfg.rs
@@ -11,7 +11,7 @@
 use rustc::middle::const_eval::ConstVal;
 use rustc::mir::repr::*;
 use transform::util;
-use transform::MirPass;
+use rustc::mir::transform::MirPass;
 
 pub struct SimplifyCfg;
 
@@ -118,8 +118,8 @@ impl SimplifyCfg {
     }
 }
 
-impl<'tcx> MirPass<'tcx> for SimplifyCfg {
-    fn run_on_mir(&mut self, mir: &mut Mir<'tcx>) {
+impl MirPass for SimplifyCfg {
+    fn run_on_mir<'tcx>(&mut self, mir: &mut Mir<'tcx>, _: &::rustc::middle::ty::ctxt<'tcx>) {
         let mut changed = true;
         while changed {
             changed = self.simplify_branches(mir);