symbian-qemu-0.9.1-12/python-2.6.1/Tools/compiler/dumppyc.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 #! /usr/bin/env python
       
     2 
       
     3 import marshal
       
     4 import dis
       
     5 import types
       
     6 
       
     7 def 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 
       
    14 def loadCode(path):
       
    15     f = open(path)
       
    16     f.read(8)
       
    17     co = marshal.load(f)
       
    18     f.close()
       
    19     return co
       
    20 
       
    21 def 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 
       
    30 def load(filename, codename=None):
       
    31     co = loadCode(filename)
       
    32     walk(co, codename)
       
    33 
       
    34 if __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)