diff options
Diffstat (limited to 'Master/tlpkg/tlperl/lib/CORE/scope.h')
-rw-r--r-- | Master/tlpkg/tlperl/lib/CORE/scope.h | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/Master/tlpkg/tlperl/lib/CORE/scope.h b/Master/tlpkg/tlperl/lib/CORE/scope.h index 97ef3faa913..9a504f1bfd8 100644 --- a/Master/tlpkg/tlperl/lib/CORE/scope.h +++ b/Master/tlpkg/tlperl/lib/CORE/scope.h @@ -21,7 +21,7 @@ /* one arg */ -#define SAVEt_GP_ALIASED_SV 4 +#define SAVEt_TMPSFLOOR 4 #define SAVEt_BOOL 5 #define SAVEt_COMPILE_WARNINGS 6 #define SAVEt_COMPPAD 7 @@ -100,8 +100,8 @@ * macros */ #define SS_MAXPUSH 4 -#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 SSCHECK(need) if (UNLIKELY(PL_savestack_ix + (I32)(need) > PL_savestack_max)) savestack_grow() +#define SSGROW(need) if (UNLIKELY(PL_savestack_ix + (I32)(need) > PL_savestack_max)) savestack_grow_cnt(need) #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)) @@ -119,7 +119,9 @@ * of the grow() can be done. These changes reduce the code of something * like save_pushptrptr() to half its former size. * Of course, doing the size check *after* pushing means we must always - * ensure there are SS_MAXPUSH free slots on the savestack + * ensure there are SS_MAXPUSH free slots on the savestack. This ensured + * bt savestack_grow() and savestack_grow_cnt always allocating SS_MAXPUSH + * slots more than asked for, or that it sets PL_savestack_max to * * These are for internal core use only and are subject to change */ @@ -131,9 +133,9 @@ assert((need) <= SS_MAXPUSH); \ ix += (need); \ PL_savestack_ix = ix; \ - assert(ix <= PL_savestack_max); \ - if (UNLIKELY((ix + SS_MAXPUSH) > PL_savestack_max)) savestack_grow(); \ - assert(PL_savestack_ix + SS_MAXPUSH <= PL_savestack_max); + assert(ix <= PL_savestack_max + SS_MAXPUSH); \ + if (UNLIKELY(ix > PL_savestack_max)) savestack_grow(); \ + assert(PL_savestack_ix <= PL_savestack_max); #define SS_ADD_INT(i) ((ssp++)->any_i32 = (I32)(i)) #define SS_ADD_LONG(i) ((ssp++)->any_long = (long)(i)) @@ -158,18 +160,18 @@ =head1 Callback Functions =for apidoc Ams||SAVETMPS -Opening bracket for temporaries on a callback. See C<FREETMPS> and +Opening bracket for temporaries on a callback. See C<L</FREETMPS>> and L<perlcall>. =for apidoc Ams||FREETMPS -Closing bracket for temporaries on a callback. See C<SAVETMPS> and +Closing bracket for temporaries on a callback. See C<L</SAVETMPS>> and L<perlcall>. =for apidoc Ams||ENTER -Opening bracket on a callback. See C<LEAVE> and L<perlcall>. +Opening bracket on a callback. See C<L</LEAVE>> and L<perlcall>. =for apidoc Ams||LEAVE -Closing bracket on a callback. See C<ENTER> and L<perlcall>. +Closing bracket on a callback. See C<L</ENTER>> and L<perlcall>. =over @@ -181,15 +183,15 @@ given literal string with the new scope. =item LEAVE_with_name(name) Same as C<LEAVE>, but when debugging is enabled it first checks that the -scope has the given name. Name must be a literal string. +scope has the given name. C<name> must be a C<NUL>-terminated literal string. =back =cut */ -#define SAVETMPS Perl_save_strlen(aTHX_ (STRLEN *)&PL_tmps_floor), \ - PL_tmps_floor = PL_tmps_ix +#define SAVETMPS Perl_savetmps(aTHX) + #define FREETMPS if (PL_tmps_ix > PL_tmps_floor) free_tmps() #ifdef DEBUGGING @@ -308,7 +310,7 @@ scope has the given name. Name must be a literal string. #define SAVECOPLINE(c) SAVEI32(CopLINE(c)) /* SSNEW() temporarily allocates a specified number of bytes of data on the - * savestack. It returns an integer index into the savestack, because a + * savestack. It returns an I32 index into the savestack, because a * pointer would get broken if the savestack is moved on reallocation. * SSNEWa() works like SSNEW(), but also aligns the data to the specified * number of bytes. MEM_ALIGNBYTES is perhaps the most useful. The |