This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Make remaining context types avoid ENTER/LEAVE
authorDavid Mitchell <davem@iabyn.com>
Fri, 28 Aug 2015 15:11:50 +0000 (16:11 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 3 Feb 2016 08:59:40 +0000 (08:59 +0000)
commitf5319de94d4a51ecd2324744e9fdac7c11804ca5
treec97f821406ce18176baa7a4cbf12df926dc307a7
parent67f63db79ede571db48021fb183ea08d1ce90c88
Make remaining context types avoid ENTER/LEAVE

Previous commits have made the 'subbish' context types like SUB, EVAL
use the context stack to save the old values of PL_savestack_ix and
PL_tmps_floor rather than using ENTER/SAVETMPS/LEAVE; extend this
to the remaining contexts types; specifically loops, bare blocks and
given/when.

Note that this means that during context stack unwinding (e.g. in
dounwind()), LEAVE_SCOPE() is called for every context popped, whereas
before it was only done for each subbish context type.

This makes the ordering of the actions in scope unwinding match much more
closely the reverse order in which things were done during scope pushing;
for example entering and leaving a for loop will now do:

    PUSHLOOP_FOR();
    ...
    ... code within loop which pushes stuff on the savestack
    ...
    LEAVE_SCOPE(); /* pops the stuff from above */
    POPLOOP();

The main reason for this commit (apart from increased consistency)
is that its a lot faster.
cop.h
pp_ctl.c
pp_hot.c