Include module for desktop build
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import bindann
|
||||
bindann.install_exception_handler()
|
||||
|
||||
import sys
|
||||
|
||||
inf = open(sys.argv[1], "r")
|
||||
|
||||
outf = open(sys.argv[1]+".dot", "w")
|
||||
outf.write("digraph %s {\n" % sys.argv[1].replace(".",""))
|
||||
|
||||
def parse_netstring(l, i):
|
||||
try:
|
||||
j = l.find(':', i)
|
||||
if j == -1:
|
||||
return (None, len(l),)
|
||||
lenval = int(l[i:j])
|
||||
val = l[j+1:j+1+lenval]
|
||||
# skip the comma
|
||||
assert l[j+1+lenval] == ","
|
||||
return (val, j+1+lenval+1,)
|
||||
except Exception, le:
|
||||
le.args = tuple(le.args + (l, i,))
|
||||
raise
|
||||
|
||||
def parse_ref(l, i):
|
||||
(attrname, i,) = parse_netstring(l, i)
|
||||
j = l.find(",", i)
|
||||
assert j != -1
|
||||
objid = l[i:j]
|
||||
return (objid, attrname, j+1,)
|
||||
|
||||
def parse_memdump_line(l):
|
||||
result = []
|
||||
|
||||
i = l.find('-')
|
||||
objid = l[:i]
|
||||
(objdesc, i,) = parse_netstring(l, i+1)
|
||||
|
||||
result.append((objid, objdesc,))
|
||||
|
||||
while i != -1 and i < len(l):
|
||||
(objid, attrname, i,) = parse_ref(l, i)
|
||||
result.append((objid, attrname,))
|
||||
|
||||
return result
|
||||
|
||||
for l in inf:
|
||||
if l[-1] != "\n":
|
||||
raise "waht the HECK? %r" % l
|
||||
res = parse_memdump_line(l.strip())
|
||||
# declare the node
|
||||
outf.write("\"%s\" [label=\"%s\"];\n" % (res[0][0], res[0][1],))
|
||||
|
||||
# declare all the edges
|
||||
for edge in res[1:]:
|
||||
if edge[1]:
|
||||
# a named edge
|
||||
outf.write("\"%s\" -> \"%s\" [style=bold, label=\"%s\"];\n" % (res[0][0], edge[0], edge[1],))
|
||||
else:
|
||||
# an anonymous edge
|
||||
outf.write("\"%s\" -> \"%s\";\n" % (res[0][0], edge[0]))
|
||||
|
||||
outf.write("}")
|
||||
Reference in New Issue
Block a user