X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=f4ec2923552d7a56da825e4232a27fa7ff0b7f46;hb=2b17c3d6ed76489160907e04347b661919f8fe2c;hp=1ac63cbf205ae3ac2ed6090033cb57530e5459c5;hpb=b5acd232730bf91f384b43bc867ec1cb4d3dd147;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index 1ac63cb..f4ec292 100644 --- a/Magic.xs +++ b/Magic.xs @@ -12,8 +12,6 @@ #define __PACKAGE__ "Variable::Magic" -#define R(S) fprintf(stderr, "R(" #S ") = %d\n", SvREFCNT(S)) - #define PERL_VERSION_GE(R, V, S) (PERL_REVISION > (R) || (PERL_REVISION == (R) && (PERL_VERSION > (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION >= (S)))))) #define PERL_VERSION_LE(R, V, S) (PERL_REVISION < (R) || (PERL_REVISION == (R) && (PERL_VERSION < (V) || (PERL_VERSION == (V) && (PERL_SUBVERSION <= (S)))))) @@ -30,34 +28,53 @@ #define VMG_HAS_PERL_AND(P, R, V, S) (PERL_VERSION_GE((R), (V), (S)) && (!VMG_PERL_PATCHLEVEL || (VMG_PERL_PATCHLEVEL >= (P)))) -/* --- Compatibility ------------------------------------------------------- */ +/* --- Threads and multiplicity -------------------------------------------- */ -#ifndef Newx -# define Newx(v, n, c) New(0, v, n, c) +#ifndef NOOP +# define NOOP #endif -#ifndef SvMAGIC_set -# define SvMAGIC_set(sv, val) (SvMAGIC(sv) = (val)) +#ifndef dNOOP +# define dNOOP #endif -#ifndef mPUSHi -# define mPUSHi(I) PUSHs(sv_2mortal(newSViv(I))) +#if defined(MULTIPLICITY) || defined(PERL_IMPLICIT_CONTEXT) +# define VMG_MULTIPLICITY 1 +# ifndef tTHX +# define tTHX PerlInterpreter* +# endif +#else +# define VMG_MULTIPLICITY 0 #endif -#ifndef dMY_CXT -# define dMY_CXT +#if VMG_MULTIPLICITY && defined(dMY_CXT) && defined(MY_CXT) && defined(START_MY_CXT) && defined(MY_CXT_INIT) && defined(MY_CXT_CLONE) +# define VMG_THREADSAFE 1 +#else +# define VMG_THREADSAFE 0 +# undef dMY_CXT +# define dMY_CXT dNOOP # undef MY_CXT # define MY_CXT vmg_globaldata # undef START_MY_CXT # define START_MY_CXT STATIC my_cxt_t MY_CXT; # undef MY_CXT_INIT -# define MY_CXT_INIT +# define MY_CXT_INIT NOOP # undef MY_CXT_CLONE -# undef aMY_CXT -# undef pMY_CXT -# define VMG_THREADSAFE 0 -#else -# define VMG_THREADSAFE 1 +# define MY_CXT_CLONE NOOP +#endif + +/* --- Compatibility ------------------------------------------------------- */ + +#ifndef Newx +# define Newx(v, n, c) New(0, v, n, c) +#endif + +#ifndef SvMAGIC_set +# define SvMAGIC_set(sv, val) (SvMAGIC(sv) = (val)) +#endif + +#ifndef mPUSHi +# define mPUSHi(I) PUSHs(sv_2mortal(newSViv(I))) #endif #ifndef PERL_MAGIC_ext @@ -835,7 +852,7 @@ CODE: #endif /* VMG_UVAR */ sv = MGWIZ2SV(w); - mg = sv_magicext(sv, NULL, PERL_MAGIC_ext, &vmg_wizard_vtbl, NULL, -1); + mg = sv_magicext(sv, NULL, PERL_MAGIC_ext, &vmg_wizard_vtbl, NULL, 0); mg->mg_private = SIG_WIZ; SvREADONLY_on(sv);