1 //! This pass just dumps MIR at a specified point.
9 use rustc
::session
::config
::{OutputFilenames, OutputType}
;
10 use rustc
::ty
::TyCtxt
;
11 use crate::transform
::{MirPass, MirSource}
;
12 use crate::util
as mir_util
;
14 pub struct Marker(pub &'
static str);
16 impl MirPass
for Marker
{
17 fn name(&self) -> Cow
<'_
, str> {
21 fn run_pass
<'tcx
>(&self, _tcx
: TyCtxt
<'tcx
>, _source
: MirSource
<'tcx
>, _body
: &mut Body
<'tcx
>) {
25 pub struct Disambiguator
{
29 impl fmt
::Display
for Disambiguator
{
30 fn fmt(&self, formatter
: &mut fmt
::Formatter
<'_
>) -> fmt
::Result
{
31 let title
= if self.is_after { "after" }
else { "before" }
;
32 write
!(formatter
, "{}", title
)
36 pub fn on_mir_pass
<'tcx
>(
38 pass_num
: &dyn fmt
::Display
,
40 source
: MirSource
<'tcx
>,
44 if mir_util
::dump_enabled(tcx
, pass_name
, source
) {
45 mir_util
::dump_mir(tcx
,
48 &Disambiguator { is_after }
,
55 pub fn emit_mir(tcx
: TyCtxt
<'_
>, outputs
: &OutputFilenames
) -> io
::Result
<()> {
56 let path
= outputs
.path(OutputType
::Mir
);
57 let mut f
= File
::create(&path
)?
;
58 mir_util
::write_mir_pretty(tcx
, None
, &mut f
)?
;