X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/3b21fb5de4ab74fae93a27637e67b3b330ee514d..fed4514af16b82213bfcf80aa6ecdabe7cfa401c:/pp_ctl.c diff --git a/pp_ctl.c b/pp_ctl.c index 66a78c2..e05a99b 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -2121,11 +2121,7 @@ PP(pp_enteriter) SVs_PADSTALE, SVs_PADSTALE); } SAVEPADSVANDMORTALIZE(PL_op->op_targ); -#ifdef USE_ITHREADS - itervar = PL_comppad; -#else itervar = &PAD_SVl(PL_op->op_targ); -#endif } else if (LIKELY(isGV(TOPs))) { /* symbol table variable */ GV * const gv = MUTABLE_GV(POPs); @@ -2726,6 +2722,9 @@ PP(pp_goto) SvREFCNT_dec(cv); DIE(aTHX_ "Can't goto subroutine from a sort sub (or similar callback)"); } + + /* partial unrolled POPSUB(): */ + if (CxTYPE(cx) == CXt_SUB && CxHASARGS(cx)) { AV* av = cx->blk_sub.argarray; @@ -2823,6 +2822,9 @@ PP(pp_goto) } else { PADLIST * const padlist = CvPADLIST(cv); + + /* partial unrolled PUSHSUB(): */ + cx->blk_sub.cv = cv; cx->blk_sub.olddepth = CvDEPTH(cv); @@ -2838,8 +2840,6 @@ PP(pp_goto) PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv)); if (CxHASARGS(cx)) { - CX_CURPAD_SAVE(cx->blk_sub); - /* cx->blk_sub.argarray has no reference count, so we need something to hang on to our argument array so that cx->blk_sub.argarray does not end up pointing @@ -2848,8 +2848,9 @@ PP(pp_goto) ence count. */ if (arg) { SvREFCNT_dec(PAD_SVl(0)); - PAD_SVl(0) = (SV *)(cx->blk_sub.argarray = arg); + PAD_SVl(0) = (SV *)arg; } + cx->blk_sub.argarray = (AV*)PAD_SVl(0); /* GvAV(PL_defgv) might have been modified on scope exit, so restore it. */