X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=db8e2308e4cb630088cbf98d3b7bab7fbe1ba628;hb=refs%2Ftags%2Fv0.38;hp=218819f909fe653162f5c6bfec622cea11d9f3ea;hpb=0b64e7c063d300a0be9139d0f155cef806fc5192;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index 218819f..db8e230 100644 --- a/Magic.xs +++ b/Magic.xs @@ -36,6 +36,11 @@ # define dNOOP #endif +/* Safe unless stated otherwise in Makefile.PL */ +#ifndef VMG_FORKSAFE +# define VMG_FORKSAFE 1 +#endif + #ifndef VMG_MULTIPLICITY # if defined(MULTIPLICITY) || defined(PERL_IMPLICIT_CONTEXT) # define VMG_MULTIPLICITY 1 @@ -135,20 +140,30 @@ STATIC SV *vmg_clone(pTHX_ SV *sv, tTHX owner) { # endif #endif -/* uvar magic and Hash::Util::FieldHash were commited with 28419 */ -#if VMG_HAS_PERL_MAINT(5, 9, 4, 28419) || VMG_HAS_PERL(5, 10, 0) +/* uvar magic and Hash::Util::FieldHash were commited with 28419, but only + * enable it on 5.10 */ +#if VMG_HAS_PERL(5, 10, 0) # define VMG_UVAR 1 #else # define VMG_UVAR 0 #endif -/* Applied to dev-5.9 as 25854, integrated to maint-5.8 as 28160 */ -#ifndef VMG_COMPAT_ARRAY_PUSH_NOLEN -# if VMG_HAS_PERL_MAINT(5, 8, 9, 28160) || VMG_HAS_PERL_MAINT(5, 9, 3, 25854) || VMG_HAS_PERL(5, 10, 0) +/* Applied to dev-5.9 as 25854, integrated to maint-5.8 as 28160, partially + * reverted to dev-5.11 as 9cdcb38b */ +#if VMG_HAS_PERL_MAINT(5, 8, 9, 28160) || VMG_HAS_PERL_MAINT(5, 9, 3, 25854) || VMG_HAS_PERL(5, 10, 0) +# ifndef VMG_COMPAT_ARRAY_PUSH_NOLEN # define VMG_COMPAT_ARRAY_PUSH_NOLEN 1 -# else +# endif +# ifndef VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID +# define VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID 1 +# endif +#else +# ifndef VMG_COMPAT_ARRAY_PUSH_NOLEN # define VMG_COMPAT_ARRAY_PUSH_NOLEN 0 # endif +# ifndef VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID +# define VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID 0 +# endif #endif /* Applied to dev-5.11 as 34908 */ @@ -812,7 +827,7 @@ STATIC int vmg_svt_clear(pTHX_ SV *sv, MAGIC *mg) { STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) { const MGWIZ *w; -#if VMG_HAS_PERL(5, 10, 0) +#if VMG_HAS_PERL(5, 9, 5) PERL_CONTEXT saved_cx; I32 cxix; #endif @@ -853,7 +868,7 @@ STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) { if (had_err) flags |= G_KEEPERR; -#if VMG_HAS_PERL(5, 10, 0) +#if VMG_HAS_PERL(5, 9, 5) /* This context should not be used anymore, but since we croak in places the * core doesn't even dare to, some pointers to it may remain in the upper call * stack. Make sure call_sv() doesn't clobber it. */ @@ -866,7 +881,7 @@ STATIC int vmg_svt_free(pTHX_ SV *sv, MAGIC *mg) { call_sv(w->cb_free, flags); -#if VMG_HAS_PERL(5, 10, 0) +#if VMG_HAS_PERL(5, 9, 5) cxstack[cxix] = saved_cx; #endif @@ -1254,6 +1269,8 @@ BOOT: newCONSTSUB(stash, "VMG_UVAR", newSVuv(VMG_UVAR)); newCONSTSUB(stash, "VMG_COMPAT_ARRAY_PUSH_NOLEN", newSVuv(VMG_COMPAT_ARRAY_PUSH_NOLEN)); + newCONSTSUB(stash, "VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID", + newSVuv(VMG_COMPAT_ARRAY_PUSH_NOLEN_VOID)); newCONSTSUB(stash, "VMG_COMPAT_ARRAY_UNSHIFT_NOLEN_VOID", newSVuv(VMG_COMPAT_ARRAY_UNSHIFT_NOLEN_VOID)); newCONSTSUB(stash, "VMG_COMPAT_ARRAY_UNDEF_CLEAR", @@ -1262,6 +1279,7 @@ BOOT: newSVuv(VMG_COMPAT_SCALAR_LENGTH_NOLEN)); newCONSTSUB(stash, "VMG_PERL_PATCHLEVEL", newSVuv(VMG_PERL_PATCHLEVEL)); newCONSTSUB(stash, "VMG_THREADSAFE", newSVuv(VMG_THREADSAFE)); + newCONSTSUB(stash, "VMG_FORKSAFE", newSVuv(VMG_FORKSAFE)); newCONSTSUB(stash, "VMG_OP_INFO_NAME", newSVuv(VMG_OP_INFO_NAME)); newCONSTSUB(stash, "VMG_OP_INFO_OBJECT", newSVuv(VMG_OP_INFO_OBJECT)); } @@ -1467,7 +1485,7 @@ PPCODE: sig = vmg_wizard_sig(wiz); data = vmg_data_get(SvRV(sv), sig); if (!data) - XSRETURN_UNDEF; + XSRETURN_EMPTY; ST(0) = data; XSRETURN(1);