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 Also, as I said, this is just the very first step, the StatListNode (and other nodes) should inherit the flag from their last child. > 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. Stefan _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev