8fec16bbaa0fa2373ba86cb803127f45d630748f
4 fun print_dot
( f
: OStream, long
: Bool )
6 f
.write
("digraph \{\n")
7 f
.write
("charset=latin1\n")
8 f
.write
("node [shape=box,style=rounded,fontname=courier]\n")
9 for block
in blocks
do block
.print_dot_nodes
(f
, long
)
10 for block
in blocks
do block
.print_dot_edges
(f
, long
)
15 redef class BasicBlock
16 fun print_dot_nodes
( f
: OStream, long
: Bool )
18 var lbl
= "\"{name}:\\n
{dot_node_text(long)}\
""
19 f
.write
( "{name} [label={lbl}]\n" )
22 fun dot_node_text
(long
: Bool): String
24 var code_lines
= new Array[String]
25 for line
in lines
do code_lines
.add
(line
.text
)
26 var code
= code_lines
.join
("")
28 code
= code
.replace
("\n","\\l").replace
("\"","\\\
"").replace
("\\n","|n").replace
("/","\\/").replace
("\r","")
29 # the last one is a hack
32 return "{dot_node_header}{code}{dot_node_footer}"
36 fun dot_node_header
: String do return ""
37 fun dot_node_footer
: String do return ""
39 fun print_dot_edges
( f
: OStream, long
: Bool )
41 for s
in successors
do
42 f
.write
( "{name} -> {s.name}\n" )
46 f
.write
( "{name} -> {n.name} [style=\"dashed\
"]\n" )