X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=5b0685d97502efdab9caa4a15d4c958615757ccf;hb=c827e4d5a2951be50c2bffc478035891b8ceb8c5;hp=7cbbaa2da3fe315efbbdf62c4cbd1e30265272b2;hpb=52f4d61f228f6e76a229b389c897932d2b5c3e62;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index 7cbbaa2..5b0685d 100644 --- a/Upper.xs +++ b/Upper.xs @@ -1001,9 +1001,26 @@ static void su_pop(pTHX_ void *ud) { ud, 24, ' ', mark, base)); if (base < mark) { +#if SU_HAS_PERL(5, 19, 4) + I32 save = -1; + PERL_CONTEXT *cx; +#endif + SU_D(PerlIO_printf(Perl_debug_log, "%p: clear leftovers\n", ud)); + +#if SU_HAS_PERL(5, 19, 4) + cx = cxstack + cxstack_ix; + if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) + save = PL_scopestack[cx->blk_oldscopesp - 1]; +#endif + PL_savestack_ix = mark; leave_scope(base); + +#if SU_HAS_PERL(5, 19, 4) + if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) + PL_scopestack[cx->blk_oldscopesp - 1] = save; +#endif } PL_savestack_ix = base;