X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=scope.h;h=edf7ffef48b03848a3e163669a8f3567f8c91e18;hb=8669ce85400697f979231096bfa64a8216391e5e;hp=9152b397e7e1022bda11a55aec250e6869fcecfd;hpb=efeab7a8047d7136a0235c1cc7329f57d6a8bfdd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/scope.h b/scope.h index 9152b39..edf7ffe 100644 --- a/scope.h +++ b/scope.h @@ -33,6 +33,12 @@ #define SAVEt_I8 32 #define SAVEt_COMPPAD 33 #define SAVEt_GENERIC_PVREF 34 +#define SAVEt_PADSV 35 +#define SAVEt_MORTALIZESV 36 + +#ifndef SCOPE_SAVES_SIGNAL_MASK +#define SCOPE_SAVES_SIGNAL_MASK 0 +#endif #define SSCHECK(need) if (PL_savestack_ix + need > PL_savestack_max) savestack_grow() #define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i)) @@ -101,7 +107,9 @@ Closing bracket on a callback. See C and L. #define SAVESPTR(s) save_sptr((SV**)&(s)) #define SAVEPPTR(s) save_pptr(SOFT_CAST(char**)&(s)) #define SAVEVPTR(s) save_vptr((void*)&(s)) +#define SAVEPADSV(s) save_padsv(s) #define SAVEFREESV(s) save_freesv((SV*)(s)) +#define SAVEMORTALIZESV(s) save_mortalizesv((SV*)(s)) #define SAVEFREEOP(o) save_freeop(SOFT_CAST(OP*)(o)) #define SAVEFREEPV(p) save_freepv(SOFT_CAST(char*)(p)) #define SAVECLEARSV(sv) save_clearsv(SOFT_CAST(SV**)&(sv)) @@ -305,7 +313,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, DEBUG_l(Perl_deb(aTHX_ "Setting up jumplevel %p, was %p\n", \ ce, PL_top_env)); \ JMPENV_PUSH_INIT_ENV(ce,NULL); \ - EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, 1));\ + EXCEPT_SET_ENV(ce,PerlProc_setjmp((ce).je_buf, SCOPE_SAVES_SIGNAL_MASK));\ (ce).je_noset = 1; \ } \ else \ @@ -354,7 +362,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, &cur_env, PL_top_env)); \ cur_env.je_prev = PL_top_env; \ OP_REG_TO_MEM; \ - cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, 1); \ + cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \ OP_MEM_TO_REG; \ PL_top_env = &cur_env; \ cur_env.je_mustcatch = FALSE; \