X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Upper.xs;h=5e8e8e396302ee3ebf951f08f50927765c0c1247;hb=2436778e0e29dd2f20d72518fec5bc8c29efe4e4;hp=8f6bda8377418af6a8dd29d82ac833b9a6ce6e3c;hpb=98e59fd864e49409c718d6bee0bf295733984ae3;p=perl%2Fmodules%2FScope-Upper.git diff --git a/Upper.xs b/Upper.xs index 8f6bda8..5e8e8e3 100644 --- a/Upper.xs +++ b/Upper.xs @@ -278,7 +278,9 @@ typedef struct { STATIC void su_call(pTHX_ void *ud_) { su_ud_reap *ud = (su_ud_reap *) ud_; #if SU_HAS_PERL(5, 10, 0) + PERL_CONTEXT saved_cx; I32 dieing = PL_op->op_type == OP_DIE; + I32 cxix; #endif dSP; @@ -297,17 +299,18 @@ STATIC void su_call(pTHX_ void *ud_) { #if SU_HAS_PERL(5, 10, 0) if (dieing) { if (cxstack_ix < cxstack_max) - ++cxstack_ix; + cxix = cxstack_ix + 1; else - cxstack_ix = Perl_cxinc(aTHX); + cxix = Perl_cxinc(aTHX); + saved_cx = cxstack[cxix]; } #endif call_sv(ud->cb, G_VOID); #if SU_HAS_PERL(5, 10, 0) - if (dieing && cxstack_ix > 0) - --cxstack_ix; + if (dieing) + cxstack[cxix] = saved_cx; #endif PUTBACK;