Clone-AsUTF8Bytes
view release on metacpan or search on metacpan
AsUTF8Bytes.xs view on Meta::CPAN
TRACEME(("magic type: %c\n", mg->mg_type));
/* Some mg_obj's can be null, don't bother cloning */
if ( mg->mg_obj != NULL )
{
switch (mg->mg_type)
{
case 'r': /* PERL_MAGIC_qr */
obj = mg->mg_obj;
break;
case 't': /* PERL_MAGIC_taint */
continue;
break;
case '<': /* PERL_MAGIC_backref */
continue;
break;
case '@': /* PERL_MAGIC_arylen_p */
continue;
break;
case 'P': /* PERL_MAGIC_tied */
case 'p': /* PERL_MAGIC_tiedelem */
case 'q': /* PERL_MAGIC_tiedscalar */
magic_ref++;
/* fall through */
default:
obj = sv_clone(mg->mg_obj, hseen, -1);
}
} else {
TRACEME(("magic object for type %c in NULL\n", mg->mg_type));
}
/* this is plain old magic, so do the same thing */
sv_magic(clone,
obj,
mg->mg_type,
mg->mg_ptr,
mg->mg_len);
}
/* major kludge - why does the vtable for a qr type need to be null? */
if (( mg = mg_find(clone, 'r') ))
mg->mg_virtual = (MGVTBL *) NULL;
}
/* 2: HASH/ARRAY - (with 'internal' elements) */
if ( magic_ref )
{
;;
}
else if ( SvTYPE(ref) == SVt_PVHV )
clone = hv_clone (ref, clone, hseen, depth);
else if ( SvTYPE(ref) == SVt_PVAV )
clone = av_clone (ref, clone, hseen, depth);
/* 3: REFERENCE (inlined for speed) */
else if (SvROK (ref))
{
TRACEME(("clone = 0x%x(%d)\n", clone, SvREFCNT(clone)));
SvREFCNT_dec(SvRV(clone));
SvRV(clone) = sv_clone (SvRV(ref), hseen, depth); /* Clone the referent */
if (sv_isobject (ref))
{
sv_bless (clone, SvSTASH (SvRV (ref)));
}
if (SvWEAKREF(ref)) {
sv_rvweaken(clone);
}
}
TRACEME(("clone = 0x%x(%d)\n", clone, SvREFCNT(clone)));
return clone;
}
MODULE = Clone::AsUTF8Bytes PACKAGE = Clone::AsUTF8Bytes
PROTOTYPES: ENABLE
void
clone_as_utf8_bytes(self, depth=-1)
SV *self
int depth
PREINIT:
SV *clone = &PL_sv_undef;
HV *hseen = newHV();
PPCODE:
TRACEME(("ref = 0x%x\n", self));
clone = sv_clone(self, hseen, depth);
hv_clear(hseen); /* Free HV */
SvREFCNT_dec((SV *)hseen);
EXTEND(SP,1);
PUSHs(sv_2mortal(clone));
( run in 1.978 second using v1.01-cache-2.11-cpan-39bf76dae61 )