import cfg_base
redef class CFG
- fun print_dot( f: OFStream, long: Bool )
+ fun print_dot( f: Writer, long: Bool )
do
f.write("digraph \{\n")
f.write("charset=latin1\n")
end
redef class BasicBlock
- fun print_dot_nodes( f: OFStream, long: Bool )
+ fun print_dot_nodes( f: Writer, long: Bool )
do
- var lbl
- if long then
- lbl = "\"{name}:\\n{dot_node_text}\""
- else
- lbl = name
- end
+ var lbl = "\"{name}:\\n{dot_node_text(long)}\""
f.write( "{name} [label={lbl}]\n" )
end
- fun dot_node_text : String
+ fun dot_node_text(long: Bool): String
do
var code_lines = new Array[String]
for line in lines do code_lines.add(line.text)
- var code = code_lines.join("")
+ var code = code_lines.join
code = code.replace("\n","\\l").replace("\"","\\\"").replace("\\n","|n").replace("/","\\/").replace("\r","")
# the last one is a hack
- return "{dot_node_header}{code}{dot_node_footer}"
+
+ if long then
+ return "{dot_node_header}{code}{dot_node_footer}"
+ else return code
end
fun dot_node_header: String do return ""
fun dot_node_footer: String do return ""
- fun print_dot_edges( f: OFStream, long: Bool )
+ fun print_dot_edges( f: Writer, long: Bool )
do
for s in successors do
f.write( "{name} -> {s.name}\n" )