&id),
Ok(()));
+ write_out_deps(sess, &outputs, &id);
+
+ controller_entry_point!(after_write_deps,
+ sess,
+ CompileState::state_after_write_deps(input,
+ sess,
+ outdir,
+ output,
+ &cstore,
+ &expanded_crate,
+ &id),
+ Ok(()));
+
let expanded_crate = assign_node_ids(sess, expanded_crate);
let dep_graph = DepGraph::new(sess.opts.build_dep_graph());
"indexing hir",
move || hir_map::map_crate(hir_forest, defs));
-
- write_out_deps(sess, &outputs, &id);
-
{
let _ignore = hir_map.dep_graph.in_ignore();
- controller_entry_point!(after_write_deps,
+ controller_entry_point!(after_hir_lowering,
sess,
- CompileState::state_after_write_deps(input,
- sess,
- outdir,
- output,
- &arenas,
- &cstore,
- &hir_map,
- &analysis,
- &resolutions,
- &expanded_crate,
- &hir_map.krate(),
- &id),
+ CompileState::state_after_hir_lowering(input,
+ sess,
+ outdir,
+ output,
+ &arenas,
+ &cstore,
+ &hir_map,
+ &analysis,
+ &resolutions,
+ &expanded_crate,
+ &hir_map.krate(),
+ &id),
Ok(()));
}
pub after_parse: PhaseController<'a>,
pub after_expand: PhaseController<'a>,
pub after_write_deps: PhaseController<'a>,
+ pub after_hir_lowering: PhaseController<'a>,
pub after_analysis: PhaseController<'a>,
pub after_llvm: PhaseController<'a>,
after_parse: PhaseController::basic(),
after_expand: PhaseController::basic(),
after_write_deps: PhaseController::basic(),
+ after_hir_lowering: PhaseController::basic(),
after_analysis: PhaseController::basic(),
after_llvm: PhaseController::basic(),
make_glob_map: resolve::MakeGlobMap::No,
session: &'ast Session,
out_dir: &'a Option<PathBuf>,
out_file: &'a Option<PathBuf>,
- arenas: &'ast ty::CtxtArenas<'ast>,
cstore: &'a CStore,
- hir_map: &'a hir_map::Map<'ast>,
- analysis: &'a ty::CrateAnalysis,
- resolutions: &'a Resolutions,
krate: &'a ast::Crate,
- hir_crate: &'a hir::Crate,
crate_name: &'a str)
-> CompileState<'a, 'b, 'ast, 'tcx> {
+ CompileState {
+ crate_name: Some(crate_name),
+ cstore: Some(cstore),
+ expanded_crate: Some(krate),
+ out_file: out_file.as_ref().map(|s| &**s),
+ ..CompileState::empty(input, session, out_dir)
+ }
+ }
+
+ fn state_after_hir_lowering(input: &'a Input,
+ session: &'ast Session,
+ out_dir: &'a Option<PathBuf>,
+ out_file: &'a Option<PathBuf>,
+ arenas: &'ast ty::CtxtArenas<'ast>,
+ cstore: &'a CStore,
+ hir_map: &'a hir_map::Map<'ast>,
+ analysis: &'a ty::CrateAnalysis,
+ resolutions: &'a Resolutions,
+ krate: &'a ast::Crate,
+ hir_crate: &'a hir::Crate,
+ crate_name: &'a str)
+ -> CompileState<'a, 'b, 'ast, 'tcx> {
CompileState {
crate_name: Some(crate_name),
arenas: Some(arenas),
if let Some((ppm, opt_uii)) = parse_pretty(sess, matches) {
if ppm.needs_ast_map(&opt_uii) {
- control.after_write_deps.stop = Compilation::Stop;
+ control.after_hir_lowering.stop = Compilation::Stop;
control.after_parse.callback = box move |state| {
state.krate = Some(pretty::fold_crate(state.krate.take().unwrap(), ppm));
};
- control.after_write_deps.callback = box move |state| {
- pretty::print_after_write_deps(state.session,
- state.ast_map.unwrap(),
- state.analysis.unwrap(),
- state.resolutions.unwrap(),
- state.input,
- &state.expanded_crate.take().unwrap(),
- state.crate_name.unwrap(),
- ppm,
- state.arenas.unwrap(),
- opt_uii.clone(),
- state.out_file);
+ control.after_hir_lowering.callback = box move |state| {
+ pretty::print_after_hir_lowering(state.session,
+ state.ast_map.unwrap(),
+ state.analysis.unwrap(),
+ state.resolutions.unwrap(),
+ state.input,
+ &state.expanded_crate.take().unwrap(),
+ state.crate_name.unwrap(),
+ ppm,
+ state.arenas.unwrap(),
+ opt_uii.clone(),
+ state.out_file);
};
} else {
control.after_parse.stop = Compilation::Stop;
write_output(out, ofile);
}
-pub fn print_after_write_deps<'tcx, 'a: 'tcx>(sess: &'a Session,
- ast_map: &hir_map::Map<'tcx>,
- analysis: &ty::CrateAnalysis,
- resolutions: &Resolutions,
- input: &Input,
- krate: &ast::Crate,
- crate_name: &str,
- ppm: PpMode,
- arenas: &'tcx ty::CtxtArenas<'tcx>,
- opt_uii: Option<UserIdentifiedItem>,
- ofile: Option<&Path>) {
+pub fn print_after_hir_lowering<'tcx, 'a: 'tcx>(sess: &'a Session,
+ ast_map: &hir_map::Map<'tcx>,
+ analysis: &ty::CrateAnalysis,
+ resolutions: &Resolutions,
+ input: &Input,
+ krate: &ast::Crate,
+ crate_name: &str,
+ ppm: PpMode,
+ arenas: &'tcx ty::CtxtArenas<'tcx>,
+ opt_uii: Option<UserIdentifiedItem>,
+ ofile: Option<&Path>) {
let dep_graph = DepGraph::new(false);
let _ignore = dep_graph.in_ignore();