]> git.lizzy.rs Git - rust.git/commitdiff
impl graphviz trait for a newtype of regioncx
authorNiko Matsakis <niko@alum.mit.edu>
Wed, 4 Jul 2018 10:07:17 +0000 (06:07 -0400)
committerNiko Matsakis <niko@alum.mit.edu>
Fri, 13 Jul 2018 05:29:10 +0000 (01:29 -0400)
src/librustc_mir/borrow_check/nll/mod.rs
src/librustc_mir/borrow_check/nll/region_infer/graphviz.rs

index 26298a289fc61815ababfe5ea7407533d8dabd4d..641d7ed342c245068e1ed616c07c531ff718d6f4 100644 (file)
@@ -296,7 +296,7 @@ fn dump_mir_results<'a, 'gcx, 'tcx>(
     let _: io::Result<()> = do catch {
         let mut file =
             pretty::create_dump_file(infcx.tcx, "regioncx.dot", None, "nll", &0, source)?;
-        regioncx.dump_graphviz(&mut file)?;
+        regioncx.dump_graphviz_raw_constraints(&mut file)?;
     };
 }
 
index 8be51257cd6cb7ac9ec444f75c71a6ba278069ed..2e41c8f8dd6a293376462d6b22c0f660b46f5a15 100644 (file)
 use super::*;
 use borrow_check::nll::constraints::OutlivesConstraint;
 
-
 impl<'tcx> RegionInferenceContext<'tcx> {
     /// Write out the region constraint graph.
-    pub(crate) fn dump_graphviz(&self, mut w: &mut dyn Write) -> io::Result<()> {
-        dot::render(self, &mut w)
+    pub(crate) fn dump_graphviz_raw_constraints(&self, mut w: &mut dyn Write) -> io::Result<()> {
+        dot::render(&RawConstraints { regioncx: self }, &mut w)
     }
 }
 
-impl<'this, 'tcx> dot::Labeller<'this> for RegionInferenceContext<'tcx> {
+struct RawConstraints<'a, 'tcx: 'a> {
+    regioncx: &'a RegionInferenceContext<'tcx>
+}
+
+impl<'a, 'this, 'tcx> dot::Labeller<'this> for RawConstraints<'a, 'tcx> {
     type Node = RegionVid;
     type Edge = OutlivesConstraint;
 
@@ -48,16 +51,16 @@ fn edge_label(&'this self, e: &OutlivesConstraint) -> dot::LabelText<'this> {
     }
 }
 
-impl<'this, 'tcx> dot::GraphWalk<'this> for RegionInferenceContext<'tcx> {
+impl<'a, 'this, 'tcx> dot::GraphWalk<'this> for RawConstraints<'a, 'tcx> {
     type Node = RegionVid;
     type Edge = OutlivesConstraint;
 
     fn nodes(&'this self) -> dot::Nodes<'this, RegionVid> {
-        let vids: Vec<RegionVid> = self.definitions.indices().collect();
+        let vids: Vec<RegionVid> = self.regioncx.definitions.indices().collect();
         vids.into_cow()
     }
     fn edges(&'this self) -> dot::Edges<'this, OutlivesConstraint> {
-        (&self.constraints.raw[..]).into_cow()
+        (&self.regioncx.constraints.raw[..]).into_cow()
     }
 
     // Render `a: b` as `a <- b`, indicating the flow