This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
save old PL_comppad in CXt_SUB/FORMAT block
authorDavid Mitchell <davem@iabyn.com>
Mon, 29 Jun 2015 10:27:36 +0000 (11:27 +0100)
committerDavid Mitchell <davem@iabyn.com>
Wed, 3 Feb 2016 08:59:33 +0000 (08:59 +0000)
commit3b21fb5de4ab74fae93a27637e67b3b330ee514d
treee6e30298b66bde462cb3cc3780a65f9fc5b0b0cb
parenteaf95e614f1e9d5d965a0fafcbac033baef2b5bb
save old PL_comppad in CXt_SUB/FORMAT block

Currently when we call a sub, the old value of PL_comppad is
saved on the save stack using SAVECOMPPAD(). Instead, save it in
a new field in the context struct, called prevcomppad. This is simpler
and more efficient.

Note that there is already a confusingly-named field in the CXt_SUB
context struct called oldcomppad, which holds the value of PL_comppad for
the *current* sub, not for its caller. So the new field had to be called
something else.

One side effect of this is that an existing bug  - which causes too much
to be popped off the savestack when dieing while leaving a sub scope - is
now more noticeable, since PL_curpad and SAVEt_CLEARSV are now out of
sync: formerly, the unwinding of the save stack restored PL_curpad in
lockstep. The fix for this will come later in this branch, when the whole
issue of context stack popping order and reentrancy is addressed; for
now, a TODO test has been added.
cop.h
pp_ctl.c
pp_hot.c
pp_sort.c
pp_sys.c
regexec.c
sv.c
t/op/sub.t