X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=2e2c2a523ab1d5de8b6c7ae710c6221a8333d6a0;hb=68c46e73d73ad6a23052a7b637163c935c8be396;hp=7cbbaa2da3fe315efbbdf62c4cbd1e30265272b2;hpb=52f4d61f228f6e76a229b389c897932d2b5c3e62;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index 7cbbaa2..2e2c2a5 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; @@ -2204,7 +2221,7 @@ static I32 su_context_gimme(pTHX_ I32 cxix) { /* --- Global setup/teardown ----------------------------------------------- */ -static U32 su_initialized = 0; +static VOL U32 su_initialized = 0; static void su_global_teardown(pTHX_ void *root) { if (!su_initialized)