about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2017-12-12 11:59:09 -0300
committerNiko Matsakis <niko@alum.mit.edu>2017-12-20 14:38:10 -0500
commit58b0506d6579455bd28d28c94cf7267205a1ba81 (patch)
tree15b0b5cfedc156a2e7b6e92a15462f0411900150
parent93afb1affc9f4e7616e05a3fc2fdb66e81f35d1e (diff)
downloadrust-58b0506d6579455bd28d28c94cf7267205a1ba81.tar.gz
rust-58b0506d6579455bd28d28c94cf7267205a1ba81.zip
Move MirVisitable to visit.rs
-rw-r--r--src/librustc/lib.rs1
-rw-r--r--src/librustc/mir/visit.rs25
-rw-r--r--src/librustc_mir/util/liveness.rs25
3 files changed, 27 insertions, 24 deletions
diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs
index f00830f9ec9..becaf78f7ec 100644
--- a/src/librustc/lib.rs
+++ b/src/librustc/lib.rs
@@ -46,6 +46,7 @@
 #![feature(const_fn)]
 #![feature(core_intrinsics)]
 #![feature(drain_filter)]
+#![feature(dyn_trait)]
 #![feature(from_ref)]
 #![feature(i128)]
 #![feature(i128_type)]
diff --git a/src/librustc/mir/visit.rs b/src/librustc/mir/visit.rs
index a50a9c819f6..0e6c14af1ec 100644
--- a/src/librustc/mir/visit.rs
+++ b/src/librustc/mir/visit.rs
@@ -811,6 +811,31 @@ macro_rules! make_mir_visitor {
 make_mir_visitor!(Visitor,);
 make_mir_visitor!(MutVisitor,mut);
 
+pub trait MirVisitable<'tcx> {
+    fn apply(&self, location: Location, visitor: &mut dyn Visitor<'tcx>);
+}
+
+impl<'tcx> MirVisitable<'tcx> for Statement<'tcx> {
+    fn apply(&self, location: Location, visitor: &mut dyn Visitor<'tcx>)
+    {
+        visitor.visit_statement(location.block, self, location)
+    }
+}
+
+impl<'tcx> MirVisitable<'tcx> for Terminator<'tcx> {
+    fn apply(&self, location: Location, visitor: &mut dyn Visitor<'tcx>)
+    {
+        visitor.visit_terminator(location.block, self, location)
+    }
+}
+
+impl<'tcx> MirVisitable<'tcx> for Option<Terminator<'tcx>> {
+    fn apply(&self, location: Location, visitor: &mut dyn Visitor<'tcx>)
+    {
+        visitor.visit_terminator(location.block, self.as_ref().unwrap(), location)
+    }
+}
+
 /// Extra information passed to `visit_ty` and friends to give context
 /// about where the type etc appears.
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
diff --git a/src/librustc_mir/util/liveness.rs b/src/librustc_mir/util/liveness.rs
index 45c9c350e7e..cce3f63b280 100644
--- a/src/librustc_mir/util/liveness.rs
+++ b/src/librustc_mir/util/liveness.rs
@@ -39,6 +39,7 @@ use rustc_data_structures::indexed_vec::{Idx, IndexVec};
 use rustc_data_structures::indexed_set::IdxSetBuf;
 use util::pretty::{dump_enabled, write_basic_block, write_mir_intro};
 use rustc::ty::item_path;
+use rustc::mir::visit::MirVisitable;
 use std::path::{Path, PathBuf};
 use std::fs;
 use rustc::ty::TyCtxt;
@@ -358,30 +359,6 @@ fn block<'tcx>(mode: LivenessMode, b: &BasicBlockData<'tcx>, locals: usize) -> D
     visitor.defs_uses
 }
 
-trait MirVisitable<'tcx> {
-    fn apply<V>(&self, location: Location, visitor: &mut V)
-    where
-        V: Visitor<'tcx>;
-}
-
-impl<'tcx> MirVisitable<'tcx> for Statement<'tcx> {
-    fn apply<V>(&self, location: Location, visitor: &mut V)
-    where
-        V: Visitor<'tcx>,
-    {
-        visitor.visit_statement(location.block, self, location)
-    }
-}
-
-impl<'tcx> MirVisitable<'tcx> for Option<Terminator<'tcx>> {
-    fn apply<V>(&self, location: Location, visitor: &mut V)
-    where
-        V: Visitor<'tcx>,
-    {
-        visitor.visit_terminator(location.block, self.as_ref().unwrap(), location)
-    }
-}
-
 pub fn dump_mir<'a, 'tcx>(
     tcx: TyCtxt<'a, 'tcx, 'tcx>,
     pass_name: &str,