X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=scope.h;h=6cfe1247e01c5a2aeca6eeef730333682a0d9c1a;hb=48eb4d6f7d05204aa5e734e924c7236048de530c;hp=3aad0be2ae728cd6c646ce68061b196307059567;hpb=02db2b7b4dd14eb0184a5e518cff4cef3723243b;p=p5sagit%2Fp5-mst-13.2.git diff --git a/scope.h b/scope.h index 3aad0be..6cfe124 100644 --- a/scope.h +++ b/scope.h @@ -1,3 +1,12 @@ +/* scope.h + * + * Copyright (c) 1997-2002, Larry Wall + * + * You may distribute under the terms of either the GNU General Public + * License or the Artistic License, as specified in the README file. + * + */ + #define SAVEt_ITEM 0 #define SAVEt_SV 1 #define SAVEt_AV 2 @@ -33,6 +42,13 @@ #define SAVEt_I8 32 #define SAVEt_COMPPAD 33 #define SAVEt_GENERIC_PVREF 34 +#define SAVEt_PADSV 35 +#define SAVEt_MORTALIZESV 36 +#define SAVEt_SHARED_PVREF 37 + +#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)) @@ -49,6 +65,8 @@ #define SSPOPDXPTR (PL_savestack[--PL_savestack_ix].any_dxptr) /* +=head1 Callback Functions + =for apidoc Ams||SAVETMPS Opening bracket for temporaries on a callback. See C and L. @@ -101,12 +119,15 @@ 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)) #define SAVEGENERICSV(s) save_generic_svref((SV**)&(s)) #define SAVEGENERICPV(s) save_generic_pvref((char**)&(s)) +#define SAVESHAREDPV(s) save_shared_pvref((char**)&(s)) #define SAVEDELETE(h,k,l) \ save_delete(SOFT_CAST(HV*)(h), SOFT_CAST(char*)(k), (I32)(l)) #define SAVEDESTRUCTOR(f,p) \ @@ -150,9 +171,9 @@ Closing bracket on a callback. See C and L. #ifdef USE_ITHREADS # define SAVECOPSTASH(c) SAVEPPTR(CopSTASHPV(c)) -# define SAVECOPSTASH_FREE(c) SAVEGENERICPV(CopSTASHPV(c)) +# define SAVECOPSTASH_FREE(c) SAVESHAREDPV(CopSTASHPV(c)) # define SAVECOPFILE(c) SAVEPPTR(CopFILE(c)) -# define SAVECOPFILE_FREE(c) SAVEGENERICPV(CopFILE(c)) +# define SAVECOPFILE_FREE(c) SAVESHAREDPV(CopFILE(c)) #else # define SAVECOPSTASH(c) SAVESPTR(CopSTASH(c)) # define SAVECOPSTASH_FREE(c) SAVECOPSTASH(c) /* XXX not refcounted */ @@ -173,9 +194,9 @@ Closing bracket on a callback. See C and L. * SSPTR() converts the index returned by SSNEW/SSNEWa() into a pointer. */ -#define SSNEW(size) save_alloc(aTHX_ (size), 0) +#define SSNEW(size) Perl_save_alloc(aTHX_ (size), 0) #define SSNEWt(n,t) SSNEW((n)*sizeof(t)) -#define SSNEWa(size,align) save_alloc(aTHX_ (size), \ +#define SSNEWa(size,align) Perl_save_alloc(aTHX_ (size), \ (align - ((int)((caddr_t)&PL_savestack[PL_savestack_ix]) % align)) % align) #define SSNEWat(n,t,align) SSNEWa((n)*sizeof(t), align) @@ -289,7 +310,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, OP_REG_TO_MEM; \ } STMT_END -#define JMPENV_PUSH_INIT(THROWFUNC) JMPENV_PUSH_INIT_ENV(*(JMPENV*)pcur_env,THROWFUNC) +#define JMPENV_PUSH_INIT(THROWFUNC) JMPENV_PUSH_INIT_ENV(*(JMPENV*)pcur_env,THROWFUNC) #define JMPENV_POST_CATCH_ENV(ce) \ STMT_START { \ @@ -305,7 +326,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 \ @@ -314,7 +335,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, (v) = EXCEPT_GET_ENV(ce); \ } STMT_END -#define JMPENV_PUSH(v) JMPENV_PUSH_ENV(*(JMPENV*)pcur_env,v) +#define JMPENV_PUSH(v) JMPENV_PUSH_ENV(*(JMPENV*)pcur_env,v) #define JMPENV_POP_ENV(ce) \ STMT_START { \ @@ -322,7 +343,7 @@ typedef void *(CPERLscope(*protect_proc_t)) (pTHX_ volatile JMPENV *pcur_env, PL_top_env = (ce).je_prev; \ } STMT_END -#define JMPENV_POP JMPENV_POP_ENV(*(JMPENV*)pcur_env) +#define JMPENV_POP JMPENV_POP_ENV(*(JMPENV*)pcur_env) #define JMPENV_JUMP(v) \ STMT_START { \ @@ -354,7 +375,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; \