Support -Z unpretty=thir-tree again
This commit is contained in:
parent
bddb59cf07
commit
e8165e7f1b
6 changed files with 29 additions and 3 deletions
|
@ -3726,6 +3726,7 @@ dependencies = [
|
||||||
"rustc_session",
|
"rustc_session",
|
||||||
"rustc_span",
|
"rustc_span",
|
||||||
"rustc_target",
|
"rustc_target",
|
||||||
|
"rustc_typeck",
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-subscriber",
|
"tracing-subscriber",
|
||||||
"tracing-tree",
|
"tracing-tree",
|
||||||
|
|
|
@ -34,6 +34,7 @@ rustc_interface = { path = "../rustc_interface" }
|
||||||
rustc_serialize = { path = "../rustc_serialize" }
|
rustc_serialize = { path = "../rustc_serialize" }
|
||||||
rustc_ast = { path = "../rustc_ast" }
|
rustc_ast = { path = "../rustc_ast" }
|
||||||
rustc_span = { path = "../rustc_span" }
|
rustc_span = { path = "../rustc_span" }
|
||||||
|
rustc_typeck = { path = "../rustc_typeck" }
|
||||||
|
|
||||||
[target.'cfg(windows)'.dependencies]
|
[target.'cfg(windows)'.dependencies]
|
||||||
winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"] }
|
winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"] }
|
||||||
|
|
|
@ -14,6 +14,7 @@ use rustc_span::symbol::Ident;
|
||||||
use rustc_span::FileName;
|
use rustc_span::FileName;
|
||||||
|
|
||||||
use std::cell::Cell;
|
use std::cell::Cell;
|
||||||
|
use std::fmt::Write;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
pub use self::PpMode::*;
|
pub use self::PpMode::*;
|
||||||
|
@ -471,7 +472,6 @@ fn print_with_analysis(
|
||||||
ofile: Option<&Path>,
|
ofile: Option<&Path>,
|
||||||
) -> Result<(), ErrorReported> {
|
) -> Result<(), ErrorReported> {
|
||||||
tcx.analysis(())?;
|
tcx.analysis(())?;
|
||||||
|
|
||||||
let out = match ppm {
|
let out = match ppm {
|
||||||
Mir => {
|
Mir => {
|
||||||
let mut out = Vec::new();
|
let mut out = Vec::new();
|
||||||
|
@ -486,8 +486,18 @@ fn print_with_analysis(
|
||||||
}
|
}
|
||||||
|
|
||||||
ThirTree => {
|
ThirTree => {
|
||||||
// FIXME(rust-lang/project-thir-unsafeck#8)
|
let mut out = String::new();
|
||||||
todo!()
|
abort_on_err(rustc_typeck::check_crate(tcx), tcx.sess);
|
||||||
|
debug!("pretty printing THIR tree");
|
||||||
|
for did in tcx.body_owners() {
|
||||||
|
let _ = writeln!(
|
||||||
|
out,
|
||||||
|
"{:?}:\n{}\n",
|
||||||
|
did,
|
||||||
|
tcx.thir_tree(ty::WithOptConstParam::unknown(did))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
|
|
|
@ -230,6 +230,12 @@ rustc_queries! {
|
||||||
desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key.did.to_def_id()) }
|
desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key.did.to_def_id()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Create a THIR tree for debugging.
|
||||||
|
query thir_tree(key: ty::WithOptConstParam<LocalDefId>) -> String {
|
||||||
|
no_hash
|
||||||
|
desc { |tcx| "constructing THIR tree for `{}`", tcx.def_path_str(key.did.to_def_id()) }
|
||||||
|
}
|
||||||
|
|
||||||
/// Set of all the `DefId`s in this crate that have MIR associated with
|
/// Set of all the `DefId`s in this crate that have MIR associated with
|
||||||
/// them. This includes all the body owners, but also things like struct
|
/// them. This includes all the body owners, but also things like struct
|
||||||
/// constructors.
|
/// constructors.
|
||||||
|
|
|
@ -30,4 +30,5 @@ pub fn provide(providers: &mut Providers) {
|
||||||
providers.thir_check_unsafety = check_unsafety::thir_check_unsafety;
|
providers.thir_check_unsafety = check_unsafety::thir_check_unsafety;
|
||||||
providers.thir_check_unsafety_for_const_arg = check_unsafety::thir_check_unsafety_for_const_arg;
|
providers.thir_check_unsafety_for_const_arg = check_unsafety::thir_check_unsafety_for_const_arg;
|
||||||
providers.thir_body = thir::cx::thir_body;
|
providers.thir_body = thir::cx::thir_body;
|
||||||
|
providers.thir_tree = thir::cx::thir_tree;
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,13 @@ crate fn thir_body<'tcx>(
|
||||||
(tcx.alloc_steal_thir(cx.thir), expr)
|
(tcx.alloc_steal_thir(cx.thir), expr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
crate fn thir_tree<'tcx>(
|
||||||
|
tcx: TyCtxt<'tcx>,
|
||||||
|
owner_def: ty::WithOptConstParam<LocalDefId>,
|
||||||
|
) -> String {
|
||||||
|
format!("{:#?}", thir_body(tcx, owner_def).0.steal())
|
||||||
|
}
|
||||||
|
|
||||||
struct Cx<'tcx> {
|
struct Cx<'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
thir: Thir<'tcx>,
|
thir: Thir<'tcx>,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue