summaryrefslogtreecommitdiff
path: root/pp_sort.c
diff options
context:
space:
mode:
authorDavid Mitchell <davem@iabyn.com>2015-06-29 11:27:36 +0100
committerDavid Mitchell <davem@iabyn.com>2016-02-03 08:59:33 +0000
commit3b21fb5de4ab74fae93a27637e67b3b330ee514d (patch)
treee6e30298b66bde462cb3cc3780a65f9fc5b0b0cb /pp_sort.c
parenteaf95e614f1e9d5d965a0fafcbac033baef2b5bb (diff)
downloadperl-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_sort.c')
-rw-r--r--pp_sort.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/pp_sort.c b/pp_sort.c
index ace0a0559e..ff76478758 100644
--- a/pp_sort.c
+++ b/pp_sort.c
@@ -1680,7 +1680,6 @@ PP(pp_sort)
PERL_STACK_OVERFLOW_CHECK();
pad_push(padlist, CvDEPTH(cv));
}
- SAVECOMPPAD();
PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv));
if (hasargs) {