1.1 --- a/micropython/__init__.py Mon Sep 15 01:34:37 2008 +0200
1.2 +++ b/micropython/__init__.py Tue Sep 16 01:28:00 2008 +0200
1.3 @@ -37,7 +37,7 @@
1.4 import micropython.ast
1.5 import micropython.inspect
1.6 import micropython.table
1.7 -import os
1.8 +import os, sys
1.9 try:
1.10 set
1.11 except NameError:
1.12 @@ -304,6 +304,67 @@
1.13
1.14 return self.paramtable
1.15
1.16 + def get_graph(self, out=None, with_builtins=0):
1.17 + out = out or sys.stdout
1.18 + print >>out, 'digraph G {'
1.19 + print >>out, ' ratio=auto;'
1.20 + print >>out, ' center=true;'
1.21 + print >>out, ' rankdir=LR;'
1.22 + for module in self.modules_ordered:
1.23 + if not with_builtins and module.name == "__builtins__":
1.24 + continue
1.25 +
1.26 + print >>out, ' subgraph "%s" {' % module.full_name()
1.27 + print >>out, ' label="%s";' % module.full_name()
1.28 + for obj in module.all_objects:
1.29 +
1.30 + if isinstance(obj, micropython.inspect.Class):
1.31 + print >>out, ' "%s" [' % obj.full_name(),
1.32 + print >>out, 'shape=record,',
1.33 + print >>out, 'label="{<%s> %s|{' % (obj.full_name(), obj.full_name()),
1.34 + first = 1
1.35 + for attr in obj.all_attributes().values():
1.36 + if not first:
1.37 + print >>out, '|',
1.38 + print >>out, '<%s> %s' % (attr.name, attr.name),
1.39 + first = 0
1.40 + print >>out, '}}"];'
1.41 +
1.42 + elif isinstance(obj, micropython.inspect.Function):
1.43 + print >>out, ' "%s" [' % obj.full_name(),
1.44 + print >>out, 'shape=record,',
1.45 + print >>out, 'label="{<%s> %s|{' % (obj.full_name(), obj.full_name()),
1.46 + first = 1
1.47 + for attr in obj.all_locals().values():
1.48 + if not first:
1.49 + print >>out, '|',
1.50 + print >>out, '<%s> %s' % (attr.name, attr.name),
1.51 + first = 0
1.52 + print >>out, '}}"];'
1.53 +
1.54 + print >>out, ' }'
1.55 +
1.56 + for module in self.modules_ordered:
1.57 + if not with_builtins and module.name == "__builtins__":
1.58 + continue
1.59 +
1.60 + print >>out, ' {'
1.61 + for obj in module.all_objects:
1.62 + if isinstance(obj, micropython.inspect.Class):
1.63 + for attr in obj.all_attributes().values():
1.64 + if attr.value is not None:
1.65 + print >>out, ' "%s":%s -> "%s";' % (obj.full_name(), attr.name, attr.value.full_name())
1.66 + elif isinstance(obj, micropython.inspect.Function):
1.67 + for attr in obj.all_locals().values():
1.68 + if attr.value is not None:
1.69 + print >>out, ' "%s":%s -> "%s";' % (obj.full_name(), attr.name, attr.value.full_name())
1.70 + print >>out, ' }'
1.71 +
1.72 + print >>out, "}"
1.73 +
1.74 + def _get_graph_name(self, obj):
1.75 + return obj.full_name().replace(".", "___")
1.76 +
1.77 # Import methods.
1.78
1.79 def find_in_path(self, name):