diff options
| author | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-01-12 22:42:12 +0100 |
|---|---|---|
| committer | Felix S. Klock II <pnkfelix@pnkfx.org> | 2015-01-12 22:42:12 +0100 |
| commit | 82eefe368723dc426fc350be1ac8d9cddc909dd5 (patch) | |
| tree | 6185af9129b89790a6a7a4c18fe6f5dce3dce1af /src/librustc_driver | |
| parent | b21a6da340fd958de370d2b83c0f17fd8fa51f89 (diff) | |
| download | rust-82eefe368723dc426fc350be1ac8d9cddc909dd5.tar.gz rust-82eefe368723dc426fc350be1ac8d9cddc909dd5.zip | |
add --xpretty flowgraph,unlabelled variant.
Diffstat (limited to 'src/librustc_driver')
| -rw-r--r-- | src/librustc_driver/pretty.rs | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/librustc_driver/pretty.rs b/src/librustc_driver/pretty.rs index 6429c5f5985..279442891be 100644 --- a/src/librustc_driver/pretty.rs +++ b/src/librustc_driver/pretty.rs @@ -53,10 +53,20 @@ pub enum PpSourceMode { PpmExpandedHygiene, } + +#[derive(Copy, PartialEq, Show)] +pub enum PpFlowGraphMode { + Default, + /// Drops the labels from the edges in the flowgraph output. This + /// is mostly for use in the --xpretty flowgraph run-make tests, + /// since the labels are largely uninteresting in those cases and + /// have become a pain to maintain. + UnlabelledEdges, +} #[derive(Copy, PartialEq, Show)] pub enum PpMode { PpmSource(PpSourceMode), - PpmFlowGraph, + PpmFlowGraph(PpFlowGraphMode), } pub fn parse_pretty(sess: &Session, @@ -73,12 +83,13 @@ pub fn parse_pretty(sess: &Session, ("expanded,identified", _) => PpmSource(PpmExpandedIdentified), ("expanded,hygiene", _) => PpmSource(PpmExpandedHygiene), ("identified", _) => PpmSource(PpmIdentified), - ("flowgraph", true) => PpmFlowGraph, + ("flowgraph", true) => PpmFlowGraph(PpFlowGraphMode::Default), + ("flowgraph,unlabelled", true) => PpmFlowGraph(PpFlowGraphMode::UnlabelledEdges), _ => { if extended { sess.fatal(format!( "argument to `xpretty` must be one of `normal`, \ - `expanded`, `flowgraph=<nodeid>`, `typed`, `identified`, \ + `expanded`, `flowgraph[,unlabelled]=<nodeid>`, `typed`, `identified`, \ `expanded,identified`, or `everybody_loops`; got {}", name).as_slice()); } else { sess.fatal(format!( @@ -417,7 +428,7 @@ fn needs_ast_map(ppm: &PpMode, opt_uii: &Option<UserIdentifiedItem>) -> bool { PpmSource(PpmExpandedIdentified) | PpmSource(PpmExpandedHygiene) | PpmSource(PpmTyped) | - PpmFlowGraph => true + PpmFlowGraph(_) => true } } @@ -431,7 +442,7 @@ fn needs_expansion(ppm: &PpMode) -> bool { PpmSource(PpmExpandedIdentified) | PpmSource(PpmExpandedHygiene) | PpmSource(PpmTyped) | - PpmFlowGraph => true + PpmFlowGraph(_) => true } } @@ -589,7 +600,7 @@ pub fn pretty_print_input(sess: Session, pp::eof(&mut pp_state.s) }), - (PpmFlowGraph, opt_uii) => { + (PpmFlowGraph(mode), opt_uii) => { debug!("pretty printing flow graph for {:?}", opt_uii); let uii = opt_uii.unwrap_or_else(|| { sess.fatal(&format!("`pretty flowgraph=..` needs NodeId (int) or @@ -613,7 +624,7 @@ pub fn pretty_print_input(sess: Session, &arenas, id, resolve::MakeGlobMap::No); - print_flowgraph(variants, analysis, code, out) + print_flowgraph(variants, analysis, code, mode, out) } None => { let message = format!("--pretty=flowgraph needs \ @@ -635,20 +646,23 @@ pub fn pretty_print_input(sess: Session, fn print_flowgraph<W:io::Writer>(variants: Vec<borrowck_dot::Variant>, analysis: ty::CrateAnalysis, code: blocks::Code, + mode: PpFlowGraphMode, mut out: W) -> io::IoResult<()> { let ty_cx = &analysis.ty_cx; let cfg = match code { blocks::BlockCode(block) => cfg::CFG::new(ty_cx, &*block), blocks::FnLikeCode(fn_like) => cfg::CFG::new(ty_cx, &*fn_like.body()), }; + let labelled_edges = mode != PpFlowGraphMode::UnlabelledEdges; + let lcfg = LabelledCFG { + ast_map: &ty_cx.map, + cfg: &cfg, + name: format!("node_{}", code.id()), + labelled_edges: labelled_edges, + }; match code { _ if variants.len() == 0 => { - let lcfg = LabelledCFG { - ast_map: &ty_cx.map, - cfg: &cfg, - name: format!("node_{}", code.id()), - }; let r = dot::render(&lcfg, &mut out); return expand_err_details(r); } @@ -662,11 +676,6 @@ fn print_flowgraph<W:io::Writer>(variants: Vec<borrowck_dot::Variant>, let (bccx, analysis_data) = borrowck::build_borrowck_dataflow_data_for_fn(ty_cx, fn_parts); - let lcfg = LabelledCFG { - ast_map: &ty_cx.map, - cfg: &cfg, - name: format!("node_{}", code.id()), - }; let lcfg = borrowck_dot::DataflowLabeller { inner: lcfg, variants: variants, |
