PageRenderTime 608ms CodeModel.GetById 246ms app.highlight 5ms RepoModel.GetById 256ms app.codeStats 0ms

/Tools/compiler/dumppyc.py

http://unladen-swallow.googlecode.com/
Python | 46 lines | 39 code | 6 blank | 1 comment | 11 complexity | 8058bdeb72380dad4951029ea46116e4 MD5 | raw file
 1#! /usr/bin/env python
 2
 3import marshal
 4import dis
 5import types
 6
 7def dump(obj):
 8    print obj
 9    for attr in dir(obj):
10        if attr.startswith('co_'):
11            val = getattr(obj, attr)
12            print "\t", attr, repr(val)
13
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
30def load(filename, codename=None):
31    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
41    if filename.endswith('.py'):
42        buf = open(filename).read()
43        co = compile(buf, filename, "exec")
44        walk(co)
45    else:
46        load(filename, codename)