1 //! This pass just dumps MIR at a specified point.
8 use crate::transform::{MirPass, MirSource};
9 use crate::util as mir_util;
10 use rustc::mir::{Body, BodyAndCache};
11 use rustc::session::config::{OutputFilenames, OutputType};
12 use rustc::ty::TyCtxt;
14 pub struct Marker(pub &'static str);
16 impl<'tcx> MirPass<'tcx> for Marker {
17 fn name(&self) -> Cow<'_, str> {
24 _source: MirSource<'tcx>,
25 _body: &mut BodyAndCache<'tcx>,
30 pub struct Disambiguator {
34 impl fmt::Display for Disambiguator {
35 fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
36 let title = if self.is_after { "after" } else { "before" };
37 write!(formatter, "{}", title)
41 pub fn on_mir_pass<'tcx>(
43 pass_num: &dyn fmt::Display,
45 source: MirSource<'tcx>,
49 if mir_util::dump_enabled(tcx, pass_name, source) {
54 &Disambiguator { is_after },
62 pub fn emit_mir(tcx: TyCtxt<'_>, outputs: &OutputFilenames) -> io::Result<()> {
63 let path = outputs.path(OutputType::Mir);
64 let mut f = File::create(&path)?;
65 mir_util::write_mir_pretty(tcx, None, &mut f)?;