trepan/lib/disassemble.py
def dis(msg, msg_nocr, section, errmsg, x=None, start_line=-1, end_line=None,
        relative_pos = False, highlight='light', start_offset=0, end_offset=None,
        include_header=False):
    """Disassemble classes, methods, functions, or code.

    With no argument, disassemble the last traceback.

    """
    lasti = -1
    if x is None:
        distb()
        return None, None
    if start_offset is None:
        start_offset = 0
    mess = ''
    if start_line > 1:
        mess += "from line %d " % start_line
    elif start_offset > 1:
        mess = "from offset %d " % start_offset
    if end_line:
        mess += "to line %d" % end_line
    elif end_offset:
        mess += "to offset %d" % end_offset

    sectioned = False


    # Try to dogpaddle to the code object for the type setting x
    if hasattr(types, 'InstanceType') and isinstance(x, types.InstanceType):
        x = x.__class__
    if inspect.ismethod(x):
        section("Disassembly of %s: %s" % (x, mess))
        sectioned = True
        x = x.im_func
    elif inspect.isfunction(x) or inspect.isgeneratorfunction(x):
        section("Disassembly of %s: %s" % (x, mess))
        x = x.func_code
        sectioned = True
    elif inspect.isgenerator(x):
        section("Disassembly of %s: %s" % (x, mess))
        frame = x.gi_frame
        lasti = frame.f_last_i
        x = x.gi_code
        sectioned = True
    elif inspect.isframe(x):
        section("Disassembly of %s: %s" % (x, mess))
        sectioned = True
        if hasattr(x, 'f_lasti'):
            lasti = x.f_lasti
            if lasti == -1: lasti = 0
            pass
        opc = get_opcode(PYTHON_VERSION, IS_PYPY)
        x = x.f_code
        if include_header:
            header_lines = Bytecode(x, opc).info().split("\n")
            header = '\n'.join([format_token(Mformat.Comment, h) for h in header_lines])
            msg(header)
        pass
    elif inspect.iscode(x):
        pass

    if hasattr(x, '__dict__'):  # Class or module
        items = sorted(x.__dict__.items())
        for name, x1 in items:
            if isinstance(x1, _have_code):
                if not sectioned:
                    section("Disassembly of %s: " % x)
                try:
                    dis(msg, msg_nocr, section, errmsg, x1,
                        start_line=start_line, end_line=end_line,
                        relative_pos = relative_pos)
                    msg("")
                except TypeError:
                    _, msg, _ = sys.exc_info()
                    errmsg("Sorry:", msg)
                    pass
                pass
            pass
        pass
    elif hasattr(x, 'co_code'):  # Code object
        if not sectioned:
            section("Disassembly of %s: " % x)
        return disassemble(msg, msg_nocr, section, x, lasti=lasti,
                           start_line=start_line, end_line=end_line,
                           relative_pos = relative_pos,
                           highlight = highlight,
                           start_offset = start_offset,
                           end_offset = end_offset)
    elif isinstance(x, str):    # Source code
        return disassemble_string(msg, msg_nocr, x,)
    else:
        errmsg("Don't know how to disassemble %s objects." %
               type(x).__name__)
    return None, None
def dis(msg, msg_nocr, section, errmsg, x=None, start_line=-1, end_line=None,
        relative_pos = False, highlight='light', start_offset=0, end_offset=None,
        include_header=False):
    """Disassemble classes, methods, functions, or code.

    With no argument, disassemble the last traceback.

    """
    lasti = -1
    if x is None:
        distb()
        return None, None
    if start_offset is None:
        start_offset = 0
    mess = ''
    if start_line > 1:
        mess += "from line %d " % start_line
    elif start_offset > 1:
        mess = "from offset %d " % start_offset
    if end_line:
        mess += "to line %d" % end_line
    elif end_offset:
        mess += "to offset %d" % end_offset

    sectioned = False


    # Try to dogpaddle to the code object for the type setting x
    if hasattr(types, 'InstanceType') and isinstance(x, types.InstanceType):
        x = x.__class__
    if inspect.ismethod(x):
        section("Disassembly of %s: %s" % (x, mess))
        sectioned = True
        x = x.im_func
    elif inspect.isfunction(x) or inspect.isgeneratorfunction(x):
        section("Disassembly of %s: %s" % (x, mess))
        x = x.func_code
        sectioned = True
    elif inspect.isgenerator(x):
        section("Disassembly of %s: %s" % (x, mess))
        frame = x.gi_frame
        lasti = frame.f_last_i
        x = x.gi_code
        sectioned = True
    elif inspect.isframe(x):
        section("Disassembly of %s: %s" % (x, mess))
        sectioned = True
        if hasattr(x, 'f_lasti'):
            lasti = x.f_lasti
            if lasti == -1: lasti = 0
            pass
        opc = get_opcode(PYTHON_VERSION, IS_PYPY)
        x = x.f_code
        if include_header:
            header_lines = Bytecode(x, opc).info().split("\n")
            header = '\n'.join([format_token(Mformat.Comment, h) for h in header_lines])
            msg(header)
        pass
    elif inspect.iscode(x):
        pass

    if hasattr(x, '__dict__'):  # Class or module
        items = sorted(x.__dict__.items())
        for name, x1 in items:
            if isinstance(x1, _have_code):
                if not sectioned:
                    section("Disassembly of %s: " % x)
                try:
                    dis(msg, msg_nocr, section, errmsg, x1,
                        start_line=start_line, end_line=end_line,
                        relative_pos = relative_pos)
                    msg("")
                except TypeError:
                    _, msg, _ = sys.exc_info()
                    errmsg("Sorry:", msg)
                    pass
                pass
            pass
        pass
    elif hasattr(x, 'co_code'):  # Code object
        if not sectioned:
            section("Disassembly of %s: " % x)
        return disassemble(msg, msg_nocr, section, x, lasti=lasti,
                           start_line=start_line, end_line=end_line,
                           relative_pos = relative_pos,
                           highlight = highlight,
                           start_offset = start_offset,
                           end_offset = end_offset)
    elif isinstance(x, str):    # Source code
        return disassemble_string(msg, msg_nocr, x,)
    else:
        errmsg("Don't know how to disassemble %s objects." %
               type(x).__name__)
    return None, None
def dis ( msg , msg_nocr , section , errmsg , x = None , start_line = - 1 , end_line = None , relative_pos = False , highlight = 'light' , start_offset = 0 , end_offset = None , include_header = False ) : lasti = - 1 if x is None : distb ( ) return None , None if start_offset is None : start_offset = 0 mess = '' if start_line > 1 : mess += "from line %d " % start_line elif start_offset > 1 : mess = "from offset %d " % start_offset if end_line : mess += "to line %d" % end_line elif end_offset : mess += "to offset %d" % end_offset sectioned = False # Try to dogpaddle to the code object for the type setting x if hasattr ( types , 'InstanceType' ) and isinstance ( x , types . InstanceType ) : x = x . __class__ if inspect . ismethod ( x ) : section ( "Disassembly of %s: %s" % ( x , mess ) ) sectioned = True x = x . im_func elif inspect . isfunction ( x ) or inspect . isgeneratorfunction ( x ) : section ( "Disassembly of %s: %s" % ( x , mess ) ) x = x . func_code sectioned = True elif inspect . isgenerator ( x ) : section ( "Disassembly of %s: %s" % ( x , mess ) ) frame = x . gi_frame lasti = frame . f_last_i x = x . gi_code sectioned = True elif inspect . isframe ( x ) : section ( "Disassembly of %s: %s" % ( x , mess ) ) sectioned = True if hasattr ( x , 'f_lasti' ) : lasti = x . f_lasti if lasti == - 1 : lasti = 0 pass opc = get_opcode ( PYTHON_VERSION , IS_PYPY ) x = x . f_code if include_header : header_lines = Bytecode ( x , opc ) . info ( ) . split ( "\n" ) header = '\n' . join ( [ format_token ( Mformat . Comment , h ) for h in header_lines ] ) msg ( header ) pass elif inspect . iscode ( x ) : pass if hasattr ( x , '__dict__' ) : # Class or module items = sorted ( x . __dict__ . items ( ) ) for name , x1 in items : if isinstance ( x1 , _have_code ) : if not sectioned : section ( "Disassembly of %s: " % x ) try : dis ( msg , msg_nocr , section , errmsg , x1 , start_line = start_line , end_line = end_line , relative_pos = relative_pos ) msg ( "" ) except TypeError : _ , msg , _ = sys . exc_info ( ) errmsg ( "Sorry:" , msg ) pass pass pass pass elif hasattr ( x , 'co_code' ) : # Code object if not sectioned : section ( "Disassembly of %s: " % x ) return disassemble ( msg , msg_nocr , section , x , lasti = lasti , start_line = start_line , end_line = end_line , relative_pos = relative_pos , highlight = highlight , start_offset = start_offset , end_offset = end_offset ) elif isinstance ( x , str ) : # Source code return disassemble_string ( msg , msg_nocr , x , ) else : errmsg ( "Don't know how to disassemble %s objects." % type ( x ) . __name__ ) return None , None
Disassemble classes, methods, functions, or code.

    With no argument, disassemble the last traceback.
Disassemble classes methods functions or code .