summaryrefslogtreecommitdiff
path: root/pad.c
diff options
context:
space:
mode:
authorPaul "LeoNerd" Evans <leonerd@leonerd.org.uk>2023-02-13 16:03:04 +0000
committerPaul Evans <leonerd@leonerd.org.uk>2023-02-13 17:41:49 +0000
commit39e1ad85b8062369b2b64cd49b203ef9ea7f6ebc (patch)
tree92b481d900a5498f0d3fe7fadd063122f281aa28 /pad.c
parent2efb2c40b438770605e2af0399d6d7b27f29f1fc (diff)
downloadperl-39e1ad85b8062369b2b64cd49b203ef9ea7f6ebc.tar.gz
Ensure that sv_dup() handles new class structures
It needs to: * clone SVt_PVOBJ instances * clone the xhv_class_* fields of an SVt_PVHV * clone the PadnameFIELDINFO structure of a padname
Diffstat (limited to 'pad.c')
-rw-r--r--pad.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/pad.c b/pad.c
index 2587e43818..4b75998cac 100644
--- a/pad.c
+++ b/pad.c
@@ -2864,6 +2864,16 @@ Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param)
PadnameTYPE (dst) = (HV *)sv_dup_inc((SV *)PadnameTYPE(src), param);
PadnameOURSTASH(dst) = (HV *)sv_dup_inc((SV *)PadnameOURSTASH(src),
param);
+ if(PadnameIsFIELD(src)) {
+ struct padname_fieldinfo *sinfo = PadnameFIELDINFO(src);
+ struct padname_fieldinfo *dinfo;
+ Newxz(dinfo, 1, struct padname_fieldinfo);
+
+ dinfo->fieldix = sinfo->fieldix;
+ dinfo->fieldstash = hv_dup_inc(sinfo->fieldstash, param);
+
+ PadnameFIELDINFO(dst) = dinfo;
+ }
dst->xpadn_low = src->xpadn_low;
dst->xpadn_high = src->xpadn_high;
dst->xpadn_gen = src->xpadn_gen;