This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Perl_rpeep: undo tail recursion optimisation
authorDavid Mitchell <davem@iabyn.com>
Mon, 18 Jul 2011 19:14:10 +0000 (20:14 +0100)
committerDavid Mitchell <davem@iabyn.com>
Mon, 18 Jul 2011 19:24:42 +0000 (20:24 +0100)
commitf11ca51e41e898a77f1fd33b9e0371e69b1be73a
tree71338052cd58ae1032cd6973d07e97d4a61a025a
parenteba804b9d4475c6d8d4728933792c5b7ca90fbf5
Perl_rpeep: undo tail recursion optimisation

commit 3c78429c102e0fe2ad30c60dfe52636b6071ef19 reduced the depth
of recursion in rpeep(), by deferring recursion into branches until a bit
later (so that the recursive call to rpeep was then likely to be shallow).
However, it went one step further: when the chain of op_next's had been
exhausted in the main loop, it processed any remaining deferrred branches
in the main loop rather than recursing. All nice and efficient, but it
broke the expectation that someone who had hooked into rpeep could follow
the chain of op_nexts in each call and visit *all* ops.

This commit removes that optimisation and restores the rpeep hook
expectancy. This shouldn't have any major effect on the depth of
recursion, and its minor inefficiency doesn't really matter for a
one-time compilation-time pass.
ext/XS-APItest/t/peep.t
op.c