Skip to content

Commit e7faea5

Browse files
committed
Provide padname_dup_inc() and padnamelist_dup_inc()
1 parent 45826d9 commit e7faea5

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

inline.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3525,6 +3525,13 @@ Perl_padname_refcnt_inc(PADNAME *pn)
35253525
return pn;
35263526
}
35273527

3528+
PERL_STATIC_INLINE PADNAMELIST *
3529+
Perl_padnamelist_refcnt_inc(PADNAMELIST *pnl)
3530+
{
3531+
PadnamelistREFCNT(pnl)++;
3532+
return pnl;
3533+
}
3534+
35283535
/* copy a string to a safe spot */
35293536

35303537
/*

pad.c

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2504,9 +2504,7 @@ Perl_padlist_dup(pTHX_ PADLIST *srcpad, CLONE_PARAMS *param)
25042504
PadlistMAX(dstpad) = max;
25052505
Newx(PadlistARRAY(dstpad), max + 1, PAD *);
25062506

2507-
PadlistARRAY(dstpad)[0] = (PAD *)
2508-
padnamelist_dup(PadlistNAMES(srcpad), param);
2509-
PadnamelistREFCNT(PadlistNAMES(dstpad))++;
2507+
PadlistARRAY(dstpad)[0] = (PAD *)padnamelist_dup_inc(PadlistNAMES(srcpad), param);
25102508
if (cloneall) {
25112509
PADOFFSET depth;
25122510
for (depth = 1; depth <= max; ++depth)
@@ -2740,8 +2738,7 @@ Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param)
27402738
for (; max >= 0; max--)
27412739
if (PadnamelistARRAY(srcpad)[max]) {
27422740
PadnamelistARRAY(dstpad)[max] =
2743-
padname_dup(PadnamelistARRAY(srcpad)[max], param);
2744-
PadnameREFCNT_inc(PadnamelistARRAY(dstpad)[max]);
2741+
padname_dup_inc(PadnamelistARRAY(srcpad)[max], param);
27452742
}
27462743

27472744
return dstpad;

pad.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()>
330330
#define PadnamelistMAX(pnl) (pnl)->xpadnl_fill
331331
#define PadnamelistMAXNAMED(pnl) (pnl)->xpadnl_max_named
332332
#define PadnamelistREFCNT(pnl) (pnl)->xpadnl_refcnt
333+
#define PadnamelistREFCNT_inc(pnl) Perl_padnamelist_refcnt_inc(pnl)
333334
#define PadnamelistREFCNT_dec(pnl) Perl_padnamelist_free(aTHX_ pnl)
334335

335336
#define PadARRAY(pad) AvARRAY(pad)
@@ -387,6 +388,11 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()>
387388
# define PADNAMEt_OUR PADNAMEf_OUR
388389
#endif
389390

391+
#ifdef USE_ITHREADS
392+
# define padnamelist_dup_inc(pnl,param) PadnamelistREFCNT_inc(padnamelist_dup(pnl,param))
393+
# define padname_dup_inc(pn,param) PadnameREFCNT_inc(padname_dup(pn,param))
394+
#endif
395+
390396
#ifdef DEBUGGING
391397
# define PAD_SV(po) pad_sv(po)
392398
# define PAD_SETSV(po,sv) pad_setsv(po,sv)

0 commit comments

Comments
 (0)