diff --git a/extra/compiler/cfg/graphviz/graphviz.factor b/extra/compiler/cfg/graphviz/graphviz.factor new file mode 100644 index 0000000000..d4513c8394 --- /dev/null +++ b/extra/compiler/cfg/graphviz/graphviz.factor @@ -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 ;