[TIP] figleaf tests

Ondrej Certik ondrej at certik.cz
Tue Jun 24 04:59:34 PDT 2008


On Tue, Jun 24, 2008 at 1:53 PM, Ondrej Certik <ondrej at certik.cz> wrote:
> On Tue, Jun 24, 2008 at 1:42 PM, Ned Batchelder <ned at nedbatchelder.com> wrote:
>> I'm glad it worked out, but I'm confused by your code.  I think all you need
>> to do is take the set of linenumbers returned by dis.findlinestarts.  Why do
>> you need to walk the opcodes?  I think this should work for your disassemble
>> function:
>>
>> def disassemble(co):
>>     """Disassemble a code object and return line numbers."""
>>     code = co.co_code
>>     lines = set(l for (o, l) in dis.findlinestarts(co))
>>     for const in co.co_consts:
>>         if type(const) == types.CodeType:
>>             lines.update(disassemble(const))
>>     return lines
>>
>> It returns the same values as your code in the files I've run it on. (And
>> maybe name it something other than disassemble! :-) ).
>
> It's about these two lines in dis.dissasemble:
>
>            if op >= dis.HAVE_ARGUMENT:
>                i = i+2
>
> I tried to comment them and on all files I tried it produced the
> correct line numbers as you pointed out, but I think this skipping of
> some lines are there for some reason, so I would like to know this
> reason before removing it.

Ah, ok, I know the reason, it was just because of walking through op
codes, exactly as you said. So yes, your code is imho correct.

Ondrej



More information about the testing-in-python mailing list