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