symbian-qemu-0.9.1-12/python-2.6.1/Tools/compiler/dumppyc.py
author Shane McErlean <shane.mcerlean@accenture.com>
Fri, 27 Aug 2010 16:03:29 +0100
changeset 102 5d2aacefd978
parent 1 2fb8b9db1c86
permissions -rw-r--r--
NTT DOCOMO, INC - Fix for bug 1291 "E32test t_tock.exe failed to load Logical Device"

#! /usr/bin/env python

import marshal
import dis
import types

def dump(obj):
    print obj
    for attr in dir(obj):
        if attr.startswith('co_'):
            val = getattr(obj, attr)
            print "\t", attr, repr(val)

def loadCode(path):
    f = open(path)
    f.read(8)
    co = marshal.load(f)
    f.close()
    return co

def walk(co, match=None):
    if match is None or co.co_name == match:
        dump(co)
        print
        dis.dis(co)
    for obj in co.co_consts:
        if type(obj) == types.CodeType:
            walk(obj, match)

def load(filename, codename=None):
    co = loadCode(filename)
    walk(co, codename)

if __name__ == "__main__":
    import sys
    if len(sys.argv) == 3:
        filename, codename = sys.argv[1:]
    else:
        filename = sys.argv[1]
        codename = None
    if filename.endswith('.py'):
        buf = open(filename).read()
        co = compile(buf, filename, "exec")
        walk(co)
    else:
        load(filename, codename)