Skip to content

Commit b64547f

Browse files
committed
Expose a public SAVESTRLEN() macro
This seems to have been forgotten in the public API, perhaps because it was added later. Fixes #19165
1 parent a764175 commit b64547f

File tree

3 files changed

+37
-32
lines changed

3 files changed

+37
-32
lines changed

pad.c

+10-10
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,11 @@ Perl_pad_new(pTHX_ int flags)
204204
SAVECOMPPAD();
205205
if (! (flags & padnew_CLONE)) {
206206
SAVESPTR(PL_comppad_name);
207-
save_strlen((STRLEN *)&PL_padix);
208-
save_strlen((STRLEN *)&PL_constpadix);
209-
save_strlen((STRLEN *)&PL_comppad_name_fill);
210-
save_strlen((STRLEN *)&PL_min_intro_pending);
211-
save_strlen((STRLEN *)&PL_max_intro_pending);
207+
SAVESTRLEN(PL_padix);
208+
SAVESTRLEN(PL_constpadix);
209+
SAVESTRLEN(PL_comppad_name_fill);
210+
SAVESTRLEN(PL_min_intro_pending);
211+
SAVESTRLEN(PL_max_intro_pending);
212212
SAVEBOOL(PL_cv_has_eval);
213213
if (flags & padnew_SAVESUB) {
214214
SAVEBOOL(PL_pad_reset_pending);
@@ -1402,17 +1402,17 @@ void
14021402
Perl_pad_block_start(pTHX_ int full)
14031403
{
14041404
ASSERT_CURPAD_ACTIVE("pad_block_start");
1405-
save_strlen((STRLEN *)&PL_comppad_name_floor);
1405+
SAVESTRLEN(PL_comppad_name_floor);
14061406
PL_comppad_name_floor = PadnamelistMAX(PL_comppad_name);
14071407
if (full)
14081408
PL_comppad_name_fill = PL_comppad_name_floor;
14091409
if (PL_comppad_name_floor < 0)
14101410
PL_comppad_name_floor = 0;
1411-
save_strlen((STRLEN *)&PL_min_intro_pending);
1412-
save_strlen((STRLEN *)&PL_max_intro_pending);
1411+
SAVESTRLEN(PL_min_intro_pending);
1412+
SAVESTRLEN(PL_max_intro_pending);
14131413
PL_min_intro_pending = 0;
1414-
save_strlen((STRLEN *)&PL_comppad_name_fill);
1415-
save_strlen((STRLEN *)&PL_padix_floor);
1414+
SAVESTRLEN(PL_comppad_name_fill);
1415+
SAVESTRLEN(PL_padix_floor);
14161416
/* PL_padix_floor is what PL_padix is reset to at the start of each
14171417
statement, by pad_reset(). We set it when entering a new scope
14181418
to keep things like this working:

pod/perlguts.pod

+3
Original file line numberDiff line numberDiff line change
@@ -1732,6 +1732,8 @@ Inside such a I<pseudo-block> the following service is available:
17321732

17331733
=item C<SAVEBOOL(int i)>
17341734

1735+
=item C<SAVESTRLEN(STRLEN i)>
1736+
17351737
These macros arrange things to restore the value of integer variable
17361738
C<i> at the end of the enclosing I<pseudo-block>.
17371739

@@ -1743,6 +1745,7 @@ C<i> at the end of the enclosing I<pseudo-block>.
17431745
=for apidoc Amh||SAVEI8|I8 i
17441746
=for apidoc Amh||SAVEI16|I16 i
17451747
=for apidoc Amh||SAVEBOOL|bool i
1748+
=for apidoc Amh||SAVESTRLEN|STRLEN i
17461749

17471750
=item C<SAVESPTR(s)>
17481751

scope.h

+24-22
Original file line numberDiff line numberDiff line change
@@ -226,28 +226,30 @@ scope has the given name. C<name> must be a literal string.
226226
if (PL_savestack_ix > old) leave_scope(old); \
227227
} STMT_END
228228

229-
#define SAVEI8(i) save_I8((I8*)&(i))
230-
#define SAVEI16(i) save_I16((I16*)&(i))
231-
#define SAVEI32(i) save_I32((I32*)&(i))
232-
#define SAVEINT(i) save_int((int*)&(i))
233-
#define SAVEIV(i) save_iv((IV*)&(i))
234-
#define SAVELONG(l) save_long((long*)&(l))
235-
#define SAVEBOOL(b) save_bool(&(b))
236-
#define SAVESPTR(s) save_sptr((SV**)&(s))
237-
#define SAVEPPTR(s) save_pptr((char**)&(s))
238-
#define SAVEVPTR(s) save_vptr((void*)&(s))
239-
#define SAVEPADSVANDMORTALIZE(s) save_padsv_and_mortalize(s)
240-
#define SAVEFREESV(s) save_freesv(MUTABLE_SV(s))
241-
#define SAVEFREEPADNAME(s) save_pushptr((void *)(s), SAVEt_FREEPADNAME)
242-
#define SAVEMORTALIZESV(s) save_mortalizesv(MUTABLE_SV(s))
243-
#define SAVEFREEOP(o) save_freeop((OP*)(o))
244-
#define SAVEFREEPV(p) save_freepv((char*)(p))
245-
#define SAVECLEARSV(sv) save_clearsv((SV**)&(sv))
246-
#define SAVEGENERICSV(s) save_generic_svref((SV**)&(s))
247-
#define SAVEGENERICPV(s) save_generic_pvref((char**)&(s))
248-
#define SAVESHAREDPV(s) save_shared_pvref((char**)&(s))
249-
#define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val)
250-
#define SAVEFREECOPHH(h) save_pushptr((void *)(h), SAVEt_FREECOPHH)
229+
#define SAVEI8(i) save_I8((I8*)&(i))
230+
#define SAVEI16(i) save_I16((I16*)&(i))
231+
#define SAVEI32(i) save_I32((I32*)&(i))
232+
#define SAVEINT(i) save_int((int*)&(i))
233+
#define SAVEIV(i) save_iv((IV*)&(i))
234+
#define SAVELONG(l) save_long((long*)&(l))
235+
#define SAVESTRLEN(l) Perl_save_strlen(aTHX_ (STRLEN*)&(l))
236+
#define SAVEBOOL(b) save_bool(&(b))
237+
#define SAVESPTR(s) save_sptr((SV**)&(s))
238+
#define SAVEPPTR(s) save_pptr((char**)&(s))
239+
#define SAVEVPTR(s) save_vptr((void*)&(s))
240+
#define SAVEPADSVANDMORTALIZE(s) save_padsv_and_mortalize(s)
241+
#define SAVEFREESV(s) save_freesv(MUTABLE_SV(s))
242+
#define SAVEFREEPADNAME(s) save_pushptr((void *)(s), SAVEt_FREEPADNAME)
243+
#define SAVEMORTALIZESV(s) save_mortalizesv(MUTABLE_SV(s))
244+
#define SAVEFREEOP(o) save_freeop((OP*)(o))
245+
#define SAVEFREEPV(p) save_freepv((char*)(p))
246+
#define SAVECLEARSV(sv) save_clearsv((SV**)&(sv))
247+
#define SAVEGENERICSV(s) save_generic_svref((SV**)&(s))
248+
#define SAVEGENERICPV(s) save_generic_pvref((char**)&(s))
249+
#define SAVESHAREDPV(s) save_shared_pvref((char**)&(s))
250+
#define SAVESETSVFLAGS(sv,mask,val) save_set_svflags(sv,mask,val)
251+
#define SAVEFREECOPHH(h) save_pushptr((void *)(h), SAVEt_FREECOPHH)
252+
251253
#define SAVEDELETE(h,k,l) \
252254
save_delete(MUTABLE_HV(h), (char*)(k), (I32)(l))
253255
#define SAVEHDELETE(h,s) \

0 commit comments

Comments
 (0)