X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a81bac00de6943a3346cceca95db5f3ce716aa0f..74c6ce8743ba719b8416ce00933e19104484b949:/scope.h diff --git a/scope.h b/scope.h index d282ff6..822c8ba 100644 --- a/scope.h +++ b/scope.h @@ -16,12 +16,12 @@ #define SAVEt_CLEARPADRANGE 1 #define SAVEt_CLEARSV 2 #define SAVEt_REGCONTEXT 3 -/*** SPARE 4 ***/ -#define SAVEt_ARG0_MAX 4 +#define SAVEt_ARG0_MAX 3 /* one arg */ +/*** SPARE 4 ***/ #define SAVEt_BOOL 5 #define SAVEt_COMPILE_WARNINGS 6 #define SAVEt_COMPPAD 7 @@ -39,9 +39,7 @@ #define SAVEt_PARSER 19 #define SAVEt_STACK_POS 20 #define SAVEt_READONLY_OFF 21 -#ifdef USE_ITHREADS -# define SAVEt_COPFILEFREE 22 -#endif +#define SAVEt_FREEPADNAME 22 #define SAVEt_ARG1_MAX 22 @@ -66,7 +64,7 @@ #define SAVEt_SAVESWITCHSTACK 39 #define SAVEt_SHARED_PVREF 40 #define SAVEt_SPTR 41 -/* UNUSED 42 */ +#define SAVEt_STRLEN 42 #define SAVEt_SV 43 #define SAVEt_SVREF 44 #define SAVEt_VPTR 45 @@ -84,6 +82,7 @@ #define SAVEt_AELEM 52 #define SAVEt_DELETE 53 + #define SAVEf_SETMAGIC 1 #define SAVEf_KEEPOLDELEM 2 @@ -101,8 +100,8 @@ * macros */ #define SS_MAXPUSH 4 -#define SSCHECK(need) if (PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max) savestack_grow() -#define SSGROW(need) if (PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max) savestack_grow_cnt(need + SS_MAXPUSH) +#define SSCHECK(need) if (UNLIKELY(PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max)) savestack_grow() +#define SSGROW(need) if (UNLIKELY(PL_savestack_ix + (I32)(need) + SS_MAXPUSH > PL_savestack_max)) savestack_grow_cnt(need + SS_MAXPUSH) #define SSPUSHINT(i) (PL_savestack[PL_savestack_ix++].any_i32 = (I32)(i)) #define SSPUSHLONG(i) (PL_savestack[PL_savestack_ix++].any_long = (long)(i)) #define SSPUSHBOOL(p) (PL_savestack[PL_savestack_ix++].any_bool = (p)) @@ -126,14 +125,14 @@ #define dSS_ADD \ I32 ix = PL_savestack_ix; \ - ANY *ssp = &PL_savestack[ix]; + ANY *ssp = &PL_savestack[ix] #define SS_ADD_END(need) \ assert((need) <= SS_MAXPUSH); \ ix += (need); \ PL_savestack_ix = ix; \ assert(ix <= PL_savestack_max); \ - if ((ix + SS_MAXPUSH) > PL_savestack_max) savestack_grow(); \ + if (UNLIKELY((ix + SS_MAXPUSH) > PL_savestack_max)) savestack_grow(); \ assert(PL_savestack_ix + SS_MAXPUSH <= PL_savestack_max); #define SS_ADD_INT(i) ((ssp++)->any_i32 = (I32)(i)) @@ -159,18 +158,18 @@ =head1 Callback Functions =for apidoc Ams||SAVETMPS -Opening bracket for temporaries on a callback. See C and +Opening bracket for temporaries on a callback. See C> and L. =for apidoc Ams||FREETMPS -Closing bracket for temporaries on a callback. See C and +Closing bracket for temporaries on a callback. See C> and L. =for apidoc Ams||ENTER -Opening bracket on a callback. See C and L. +Opening bracket on a callback. See C> and L. =for apidoc Ams||LEAVE -Closing bracket on a callback. See C and L. +Closing bracket on a callback. See C> and L. =over @@ -189,7 +188,8 @@ scope has the given name. Name must be a literal string. =cut */ -#define SAVETMPS save_int((int*)&PL_tmps_floor), PL_tmps_floor = PL_tmps_ix +#define SAVETMPS Perl_save_strlen(aTHX_ (STRLEN *)&PL_tmps_floor), \ + PL_tmps_floor = PL_tmps_ix #define FREETMPS if (PL_tmps_ix > PL_tmps_floor) free_tmps() #ifdef DEBUGGING @@ -242,6 +242,7 @@ scope has the given name. Name must be a literal string. #define SAVEVPTR(s) save_vptr((void*)&(s)) #define SAVEPADSVANDMORTALIZE(s) save_padsv_and_mortalize(s) #define SAVEFREESV(s) save_freesv(MUTABLE_SV(s)) +#define SAVEFREEPADNAME(s) save_pushptr((void *)(s), SAVEt_FREEPADNAME) #define SAVEMORTALIZESV(s) save_mortalizesv(MUTABLE_SV(s)) #define SAVEFREEOP(o) save_freeop((OP*)(o)) #define SAVEFREEPV(p) save_freepv((char*)(p)) @@ -256,7 +257,7 @@ scope has the given name. Name must be a literal string. #define SAVEHDELETE(h,s) \ save_hdelete(MUTABLE_HV(h), (s)) #define SAVEADELETE(a,k) \ - save_adelete(MUTABLE_AV(a), (I32)(k)) + save_adelete(MUTABLE_AV(a), (SSize_t)(k)) #define SAVEDESTRUCTOR(f,p) \ save_destructor((DESTRUCTORFUNC_NOCONTEXT_t)(f), (void*)(p)) @@ -295,11 +296,8 @@ scope has the given name. Name must be a literal string. #ifdef USE_ITHREADS # define SAVECOPSTASH_FREE(c) SAVEIV((c)->cop_stashoff) -# define SAVECOPFILE(c) SAVEIV((c)->cop_filegvoff) -# define SAVECOPFILE_FREE(c) ( \ - SAVEIV((c)->cop_filegvoff), \ - save_pushptr((void *)(c), SAVEt_COPFILEFREE) \ - ) +# define SAVECOPFILE(c) SAVEPPTR(CopFILE(c)) +# define SAVECOPFILE_FREE(c) SAVESHAREDPV(CopFILE(c)) #else # /* XXX not refcounted */ # define SAVECOPSTASH_FREE(c) SAVESPTR(CopSTASH(c)) @@ -343,11 +341,5 @@ STMT_START { \ #define save_op() save_pushptr((void *)(PL_op), SAVEt_OP) /* - * Local variables: - * c-indentation-style: bsd - * c-basic-offset: 4 - * indent-tabs-mode: nil - * End: - * * ex: set ts=8 sts=4 sw=4 et: */