diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-05-03 11:25:13 +0000 |
commit | 458120dd40db6b4df55a4e96b650e16798ef06a0 (patch) | |
tree | 8f82685be24fef97e715c6f5ca4c68d34d5074ee /sys/src/cmd/python/Tools/compiler/dumppyc.py | |
parent | 3a742c699f6806c1145aea5149bf15de15a0afd7 (diff) |
add hg and python
Diffstat (limited to 'sys/src/cmd/python/Tools/compiler/dumppyc.py')
-rwxr-xr-x | sys/src/cmd/python/Tools/compiler/dumppyc.py | 47 |
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) |