From 4d1da10d32cabd393e6959523d628c6edfe15088 Mon Sep 17 00:00:00 2001
From: Andreas Kloeckner <inform@tiker.net>
Date: Thu, 12 Mar 2015 15:29:30 -0400
Subject: [PATCH] More expression tree improvements

---
 pymbolic/mapper/graphviz.py | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/pymbolic/mapper/graphviz.py b/pymbolic/mapper/graphviz.py
index 0ee50a5..776dd67 100644
--- a/pymbolic/mapper/graphviz.py
+++ b/pymbolic/mapper/graphviz.py
@@ -56,10 +56,10 @@ class GraphvizMapper(WalkMapper):
     def map_leaf(self, expr):
         self.lines.append(
                 "%s [label=\"%s\", shape=box];" % (
-                    self.get_id(expr), str(expr)))
+                    self.get_id(expr), str(expr).replace("\\", "\\\\")))
 
-        self.visit(expr, node_printed=True)
-        self.post_visit(expr)
+        if self.visit(expr, node_printed=True):
+            self.post_visit(expr)
 
     def generate_unique_id(self):
         self.next_unique_id += 1
@@ -117,11 +117,19 @@ class GraphvizMapper(WalkMapper):
         self.post_visit(expr)
 
     def map_variable(self, expr):
+        # Shared nodes for variables do not make for pretty graphs.
+        # So we generate our own unique IDs for them.
+
+        node_id = self.generate_unique_id()
+
         self.lines.append(
-                "%s [label=\"%s\", shape=box];" % (self.get_id(expr), expr.name))
+                "%s [label=\"%s\",shape=box];" % (
+                    node_id,
+                    expr.name))
+        if not self.visit(expr, node_printed=True, node_id=node_id):
+            return
 
-        if self.visit(expr, node_printed=True):
-            self.post_visit(expr)
+        self.post_visit(expr)
 
     def map_lookup(self, expr):
         self.lines.append(
-- 
GitLab