[New-bugs-announce] [issue8310] dis.dis function skips new-style classes in a module

Ozgur Dogan Ugurlu report at bugs.python.org
Sun Apr 4 14:57:33 CEST 2010


New submission from Ozgur Dogan Ugurlu <dogeen at gmail.com>:

The documentation says:

dis.dis([bytesource])
Disassemble the bytesource object. bytesource can denote either a module, a class, a method, a function, or a code object. For a module, it disassembles all functions. For a class, it disassembles all methods. For a single code sequence, it prints one line per bytecode instruction. If no object is provided, it disassembles the last traceback.

And the behavior is correct for old-style classes. However, since the if check in the function dis.dis is like this:

if hasattr(x, '__dict__'):
        items = x.__dict__.items()
        items.sort()
        for name, x1 in items:
            if type(x1) in (types.MethodType,
                            types.FunctionType,
                            types.CodeType,
                            types.ClassType):

when given a module (x), it doesn't handle new-style classes which are types.TypeType. (types.ClassType are old-style classes)

A simple addition of types.TypeType to the list used by the inner if clause fixes the problem for me but I don't know if it could introduce another bug.

----------
components: Library (Lib)
messages: 102338
nosy: dogeen
severity: normal
status: open
title: dis.dis function skips new-style classes in a module
type: behavior
versions: Python 2.6

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue8310>
_______________________________________


More information about the New-bugs-announce mailing list