2011/1/27 Robert Bradshaw <rober...@math.washington.edu>:
> On Tue, Jan 25, 2011 at 11:49 AM, Vitja Makarov <vitja.maka...@gmail.com> 
> wrote:
>> 2011/1/25 Stefan Behnel <stefan...@behnel.de>:
>>> 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?).
>>>
>>
>> May be it could be placed in StatNodeList.analyse_flow_control()?
>
> This is crufty code that should probably be removed, I wouldn't count
> on using it too much.


Ok. I've moved it into ParseTreeTransforms and created branch:

https://github.com/vitek/cython/commit/a8e957ec29f0448ee7c43bd3969012772d09b236

Some error tests do fail because nodes are removed and code generation
time error is omited.

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

Reply via email to