blob: 39b96136a74765dc9b15634d3bd5a68e7e0bcc51 [file] [log] [blame]
Jeremy Hyltonb769e802000-10-09 14:35:24 +00001#! /usr/bin/env python
2
3import marshal
4import dis
5import types
6
7def dump(obj):
8 print obj
9 for attr in dir(obj):
Jeremy Hyltonce0c19c2001-09-17 18:08:20 +000010 if attr.startswith('co_'):
11 val = getattr(obj, attr)
12 print "\t", attr, repr(val)
Jeremy Hyltonb769e802000-10-09 14:35:24 +000013
14def loadCode(path):
15 f = open(path)
16 f.read(8)
17 co = marshal.load(f)
18 f.close()
19 return co
20
21def walk(co, match=None):
22 if match is None or co.co_name == match:
23 dump(co)
24 print
25 dis.dis(co)
26 for obj in co.co_consts:
27 if type(obj) == types.CodeType:
28 walk(obj, match)
29
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000030def load(filename, codename=None):
Jeremy Hyltonb769e802000-10-09 14:35:24 +000031 co = loadCode(filename)
32 walk(co, codename)
33
34if __name__ == "__main__":
35 import sys
36 if len(sys.argv) == 3:
37 filename, codename = sys.argv[1:]
38 else:
39 filename = sys.argv[1]
40 codename = None
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000041 if filename.endswith('.py'):
42 buf = open(filename).read()
43 co = compile(buf, filename, "exec")
44 walk(co)
Tim Peters536cf992005-12-25 23:18:31 +000045 else:
Jeremy Hylton3e0055f2005-10-20 19:59:25 +000046 load(filename, codename)