2011/1/27 Stefan Behnel <stefan...@behnel.de>:
> Vitja Makarov, 27.01.2011 08:25:
>>>> 2011/1/25 Stefan Behnel:
>>>>> Vitja Makarov, 25.01.2011 10:01:
>>>>>> 2011/1/25 Stefan Behnel:
>>>>>>>       def x():
>>>>>>>           do_some_stuff()
>>>>>>>
>>>>>>>           return # disable rest of code, e.g. during debugging
>>>>>>>
>>>>>>>           unreachable_code()
>>>>>>>
>>>>>>> Cython shouldn't bother generating dead code here (even if the C 
>>>>>>> compiler
>>>>>>> would drop it anyway).
>>>>>>
>>>>>> That should be rather easy to do: remove all the nodes in StatList
>>>>>> after: break, continue, return, raise, something else?
>>>>>
>>>>> Careful, this may involve recursive propagation through helper nodes. The
>>>>> tree isn't always as simple as that.
>>>>>
>>>>> I think an attribute "is_terminator" on Nodes might do the job. It's set 
>>>>> to
>>>>> False by default and to True on all nodes you mentioned above, and is
>>>>> inherited by StatListNode if its last node is a terminator (while dropping
>>>>> its remaining child nodes at the same time) and by all helper nodes that
>>>>> contain StatListNodes. This could be done in analyse_types() (or maybe
>>>>> earlier?).
>>
>> Ok. I've moved it into ParseTreeTransforms and created branch:
>>
>> https://github.com/vitek/cython/commit/a8e957ec29f0448ee7c43bd3969012772d09b236
>
> Interesting:
>
> +    is_terminator = 0
> +    is_terminator = 1
> +    is_terminator = True
>

Oops

> Also, as I said, this is just the very first step,

Sure here, just a try.

> the StatListNode (and
> other nodes) should inherit the flag from their last child.
>

This could be done simply in RemoveUnreachableCode

node.is_terminator = True

I don't actually understand where could be that used later?


>
>> Some error tests do fail because nodes are removed and code generation
>> time error is omited.
>
> That should be fixable in most cases. We could also use a compiler option
> that disables dead code removal, and then use it in the error tests.
>

Hmm, not sure here.
I think it should be better to move checks outside code generation.

-- 
vitja.
_______________________________________________
Cython-dev mailing list
Cython-dev@codespeak.net
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to