From 58b0506d6579455bd28d28c94cf7267205a1ba81 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Tue, 12 Dec 2017 11:59:09 -0300 Subject: [PATCH] Move MirVisitable to visit.rs --- src/librustc/lib.rs | 1 + src/librustc/mir/visit.rs | 25 +++++++++++++++++++++++++ src/librustc_mir/util/liveness.rs | 25 +------------------------ 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> { + 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(&self, location: Location, visitor: &mut V) - where - V: Visitor<'tcx>; -} - -impl<'tcx> MirVisitable<'tcx> for Statement<'tcx> { - fn apply(&self, location: Location, visitor: &mut V) - where - V: Visitor<'tcx>, - { - visitor.visit_statement(location.block, self, location) - } -} - -impl<'tcx> MirVisitable<'tcx> for Option> { - fn apply(&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,