summaryrefslogtreecommitdiff
path: root/sys/src/cmd/python/Tools/compiler/dumppyc.py
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-05-03 11:25:13 +0000
commit458120dd40db6b4df55a4e96b650e16798ef06a0 (patch)
tree8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Tools/compiler/dumppyc.py
parent3a742c699f6806c1145aea5149bf15de15a0afd7 (diff)
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Tools/compiler/dumppyc.py')
-rwxr-xr-xsys/src/cmd/python/Tools/compiler/dumppyc.py47
1 files changed, 47 insertions, 0 deletions
diff --git a/sys/src/cmd/python/Tools/compiler/dumppyc.py b/sys/src/cmd/python/Tools/compiler/dumppyc.py
new file mode 100755
index 000000000..1258cce81
--- /dev/null
+++ b/sys/src/cmd/python/Tools/compiler/dumppyc.py
@@ -0,0 +1,47 @@
+#! /usr/bin/env python
+
+import marshal
+import os
+import dis
+import types
+
+def dump(obj):
+ print obj
+ for attr in dir(obj):
+ if attr.startswith('co_'):
+ val = getattr(obj, attr)
+ print "\t", attr, repr(val)
+
+def loadCode(path):
+ f = open(path)
+ f.read(8)
+ co = marshal.load(f)
+ f.close()
+ return co
+
+def walk(co, match=None):
+ if match is None or co.co_name == match:
+ dump(co)
+ print
+ dis.dis(co)
+ for obj in co.co_consts:
+ if type(obj) == types.CodeType:
+ walk(obj, match)
+
+def load(filename, codename=None):
+ co = loadCode(filename)
+ walk(co, codename)
+
+if __name__ == "__main__":
+ import sys
+ if len(sys.argv) == 3:
+ filename, codename = sys.argv[1:]
+ else:
+ filename = sys.argv[1]
+ codename = None
+ if filename.endswith('.py'):
+ buf = open(filename).read()
+ co = compile(buf, filename, "exec")
+ walk(co)
+ else:
+ load(filename, codename)