mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 08:38:23 +00:00
Provide padname_dup_inc() and padnamelist_dup_inc()
This commit is contained in:
parent
45826d9c09
commit
e7faea5438
7
inline.h
7
inline.h
@ -3525,6 +3525,13 @@ Perl_padname_refcnt_inc(PADNAME *pn)
|
||||
return pn;
|
||||
}
|
||||
|
||||
PERL_STATIC_INLINE PADNAMELIST *
|
||||
Perl_padnamelist_refcnt_inc(PADNAMELIST *pnl)
|
||||
{
|
||||
PadnamelistREFCNT(pnl)++;
|
||||
return pnl;
|
||||
}
|
||||
|
||||
/* copy a string to a safe spot */
|
||||
|
||||
/*
|
||||
|
||||
7
pad.c
7
pad.c
@ -2504,9 +2504,7 @@ Perl_padlist_dup(pTHX_ PADLIST *srcpad, CLONE_PARAMS *param)
|
||||
PadlistMAX(dstpad) = max;
|
||||
Newx(PadlistARRAY(dstpad), max + 1, PAD *);
|
||||
|
||||
PadlistARRAY(dstpad)[0] = (PAD *)
|
||||
padnamelist_dup(PadlistNAMES(srcpad), param);
|
||||
PadnamelistREFCNT(PadlistNAMES(dstpad))++;
|
||||
PadlistARRAY(dstpad)[0] = (PAD *)padnamelist_dup_inc(PadlistNAMES(srcpad), param);
|
||||
if (cloneall) {
|
||||
PADOFFSET depth;
|
||||
for (depth = 1; depth <= max; ++depth)
|
||||
@ -2740,8 +2738,7 @@ Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param)
|
||||
for (; max >= 0; max--)
|
||||
if (PadnamelistARRAY(srcpad)[max]) {
|
||||
PadnamelistARRAY(dstpad)[max] =
|
||||
padname_dup(PadnamelistARRAY(srcpad)[max], param);
|
||||
PadnameREFCNT_inc(PadnamelistARRAY(dstpad)[max]);
|
||||
padname_dup_inc(PadnamelistARRAY(srcpad)[max], param);
|
||||
}
|
||||
|
||||
return dstpad;
|
||||
|
||||
6
pad.h
6
pad.h
@ -330,6 +330,7 @@ Restore the old pad saved into the local variable C<opad> by C<PAD_SAVE_LOCAL()>
|
||||
#define PadnamelistMAX(pnl) (pnl)->xpadnl_fill
|
||||
#define PadnamelistMAXNAMED(pnl) (pnl)->xpadnl_max_named
|
||||
#define PadnamelistREFCNT(pnl) (pnl)->xpadnl_refcnt
|
||||
#define PadnamelistREFCNT_inc(pnl) Perl_padnamelist_refcnt_inc(pnl)
|
||||
#define PadnamelistREFCNT_dec(pnl) Perl_padnamelist_free(aTHX_ pnl)
|
||||
|
||||
#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()>
|
||||
# define PADNAMEt_OUR PADNAMEf_OUR
|
||||
#endif
|
||||
|
||||
#ifdef USE_ITHREADS
|
||||
# define padnamelist_dup_inc(pnl,param) PadnamelistREFCNT_inc(padnamelist_dup(pnl,param))
|
||||
# define padname_dup_inc(pn,param) PadnameREFCNT_inc(padname_dup(pn,param))
|
||||
#endif
|
||||
|
||||
#ifdef DEBUGGING
|
||||
# define PAD_SV(po) pad_sv(po)
|
||||
# define PAD_SETSV(po,sv) pad_setsv(po,sv)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user