This commit was manufactured by cvs2svn to create tag 'r234'.
[python/dscho.git] / Tools / compiler / dumppyc.py
blob5ff67baaaaaf212e0c22f537695fd6b8d7c68332
1 #! /usr/bin/env python
3 import marshal
4 import os
5 import dis
6 import types
8 def dump(obj):
9 print obj
10 for attr in dir(obj):
11 if attr.startswith('co_'):
12 val = getattr(obj, attr)
13 print "\t", attr, repr(val)
15 def loadCode(path):
16 if path[-1] == "c":
17 f = open(path)
18 f.read(8)
19 co = marshal.load(f)
20 f.close()
21 return co
22 else:
23 return compile(open(path).read(), path, "exec")
25 def walk(co, match=None):
26 if match is None or co.co_name == match:
27 dump(co)
28 print
29 dis.dis(co)
30 for obj in co.co_consts:
31 if type(obj) == types.CodeType:
32 walk(obj, match)
34 def main(filename, codename=None):
35 co = loadCode(filename)
36 walk(co, codename)
38 if __name__ == "__main__":
39 import sys
40 if len(sys.argv) == 3:
41 filename, codename = sys.argv[1:]
42 else:
43 filename = sys.argv[1]
44 codename = None
45 if filename.endswith('.py') and os.path.exists(filename+"c"):
46 filename += "c"
47 main(filename, codename)