X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=0d6359e83d5529815bd7b136205acede6f29c9bd;hb=0552b1e308c11b5488b02b773e6a9529cd729710;hp=c19b2f3cc04fe549a207266dbd417d506355c9b9;hpb=9dce2bfe18bcd7d9914310c81b8832d40fb04fbb;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index c19b2f3..0d6359e 100644 --- a/Magic.xs +++ b/Magic.xs @@ -79,13 +79,25 @@ STATIC SV *vmg_clone(pTHX_ SV *sv, tTHX owner) { #define vmg_clone(P, O) vmg_clone(aTHX_ (P), (O)) + SV *dupsv; + +#if VMG_HAS_PERL(5, 13, 2) + CLONE_PARAMS *param = Perl_clone_params_new(owner, aTHX); + + dupsv = sv_dup(sv, param); + + Perl_clone_params_del(param); +#else CLONE_PARAMS param; param.stashes = NULL; /* don't need it unless sv is a PVHV */ param.flags = 0; param.proto_perl = owner; - return SvREFCNT_inc(sv_dup(sv, ¶m)); + dupsv = sv_dup(sv, ¶m); +#endif + + return SvREFCNT_inc(dupsv); } #endif /* VMG_THREADSAFE */ @@ -184,6 +196,12 @@ STATIC SV *vmg_clone(pTHX_ SV *sv, tTHX owner) { # define VMG_COMPAT_SCALAR_LENGTH_NOLEN 0 #endif +#if VMG_HAS_PERL(5, 13, 2) +# define VMG_COMPAT_GLOB_GET 1 +#else +# define VMG_COMPAT_GLOB_GET 0 +#endif + /* ... Bug-free mg_magical ................................................. */ /* See the discussion at http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-01/msg00036.html. This version is specialized to our needs. */ @@ -1345,6 +1363,7 @@ BOOT: newSVuv(VMG_COMPAT_ARRAY_UNDEF_CLEAR)); newCONSTSUB(stash, "VMG_COMPAT_SCALAR_LENGTH_NOLEN", newSVuv(VMG_COMPAT_SCALAR_LENGTH_NOLEN)); + newCONSTSUB(stash, "VMG_COMPAT_GLOB_GET", newSVuv(VMG_COMPAT_GLOB_GET)); newCONSTSUB(stash, "VMG_PERL_PATCHLEVEL", newSVuv(VMG_PERL_PATCHLEVEL)); newCONSTSUB(stash, "VMG_THREADSAFE", newSVuv(VMG_THREADSAFE)); newCONSTSUB(stash, "VMG_FORKSAFE", newSVuv(VMG_FORKSAFE));