]> gitweb.factorcode.org Git - factor.git/commitdiff
compiler.cfg.graphviz: A utility for rendering CFGs with graphviz
authorSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 28 Jul 2009 11:41:29 +0000 (06:41 -0500)
committerSlava Pestov <slava@slava-pestovs-macbook-pro.local>
Tue, 28 Jul 2009 11:41:29 +0000 (06:41 -0500)
extra/compiler/cfg/graphviz/graphviz.factor [new file with mode: 0644]

diff --git a/extra/compiler/cfg/graphviz/graphviz.factor b/extra/compiler/cfg/graphviz/graphviz.factor
new file mode 100644 (file)
index 0000000..d4513c8
--- /dev/null
@@ -0,0 +1,22 @@
+! Copyright (C) 2009 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license
+USING: accessors compiler.cfg.rpo images.viewer io
+io.encodings.ascii io.files io.files.unique io.launcher kernel
+math.parser sequences ;
+IN: compiler.cfg.graphviz
+
+: cfg>dot ( cfg -- )
+    "digraph CFG {" print
+    [
+        [ number>> ] [ successors>> ] bi [
+            number>> [ number>string ] bi@ " -> " glue write ";" print
+        ] with each
+    ] each-basic-block
+    "}" print ;
+
+: render-cfg ( cfg -- )
+    "cfg" "dot" make-unique-file
+    [ ascii [ cfg>dot ] with-file-writer ]
+    [ { "dot" "-Tpng" "-O" } swap suffix try-process ]
+    [ ".png" append { "open" } swap suffix try-process ]
+    tri ;