diff options
author | David Mitchell <davem@iabyn.com> | 2015-06-29 11:27:36 +0100 |
---|---|---|
committer | David Mitchell <davem@iabyn.com> | 2016-02-03 08:59:33 +0000 |
commit | 3b21fb5de4ab74fae93a27637e67b3b330ee514d (patch) | |
tree | e6e30298b66bde462cb3cc3780a65f9fc5b0b0cb /pp_sys.c | |
parent | eaf95e614f1e9d5d965a0fafcbac033baef2b5bb (diff) | |
download | perl-3b21fb5de4ab74fae93a27637e67b3b330ee514d.tar.gz |
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.
Diffstat (limited to 'pp_sys.c')
-rw-r--r-- | pp_sys.c | 1 |
1 files changed, 0 insertions, 1 deletions
@@ -1395,7 +1395,6 @@ S_doform(pTHX_ CV *cv, GV *gv, OP *retop) PERL_STACK_OVERFLOW_CHECK(); pad_push(CvPADLIST(cv), CvDEPTH(cv)); } - SAVECOMPPAD(); PAD_SET_CUR_NOSAVE(CvPADLIST(cv), CvDEPTH(cv)); setdefout(gv); /* locally select filehandle so $% et al work */ |