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