X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=702481594747b6e41c6753b5f9304e1fecae3cf7;hb=089138101b5dada28467146e2d948ba041bf97d7;hp=272028d428c2594c001bba4ffbdef63dae2dbec7;hpb=c50db90df8e42e68dbec0a73acc5010cc951d19d;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index 272028d..7024815 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) + 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) + PL_scopestack[cx->blk_oldscopesp - 1] = save; +#endif } PL_savestack_ix = base; @@ -1381,6 +1398,8 @@ static su_uplevel_ud *su_uplevel_storage_new(pTHX_ I32 cxix) { return sud; } +#if SU_HAS_PERL(5, 13, 7) + static void su_uplevel_storage_delete(pTHX_ su_uplevel_ud *sud) { #define su_uplevel_storage_delete(S) su_uplevel_storage_delete(aTHX_ (S)) dMY_CXT; @@ -1408,6 +1427,8 @@ static void su_uplevel_storage_delete(pTHX_ su_uplevel_ud *sud) { } } +#endif + static int su_uplevel_goto_static(const OP *o) { for (; o; o = OpSIBLING(o)) { /* goto ops are unops with kids. */