X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=Magic.xs;h=70b26173e11b3f9b128967cc9489cd746c6cd4fc;hb=c82a0127ec7ea6da80e943d0bf32bcf4052f429c;hp=caff817b84c869d0d76fd6a63c9e0e9fe7c8d4f8;hpb=cb678e6b73356092edce6d42b76f3d667f95d7c4;p=perl%2Fmodules%2FVariable-Magic.git diff --git a/Magic.xs b/Magic.xs index caff817..70b2617 100644 --- a/Magic.xs +++ b/Magic.xs @@ -533,7 +533,7 @@ STATIC MGVTBL vmg_wizard_vtbl = { STATIC SV *vmg_wizard_new(pTHX_ const MGWIZ *w) { #define vmg_wizard_new(W) vmg_wizard_new(aTHX_ (W)) - SV *wiz = newSVuv(PTR2UV(w)); + SV *wiz = newSVuv(PTR2IV(w)); if (w) { MAGIC *mg = sv_magicext(wiz, NULL, PERL_MAGIC_ext, &vmg_wizard_vtbl, NULL, 0); @@ -544,7 +544,7 @@ STATIC SV *vmg_wizard_new(pTHX_ const MGWIZ *w) { return wiz; } -STATIC SV *vmg_wizard_validate(pTHX_ SV *wiz) { +STATIC const SV *vmg_wizard_validate(pTHX_ const SV *wiz) { #define vmg_wizard_validate(W) vmg_wizard_validate(aTHX_ (W)) if (SvROK(wiz)) { wiz = SvRV(wiz); @@ -555,7 +555,7 @@ STATIC SV *vmg_wizard_validate(pTHX_ SV *wiz) { croak(vmg_invalid_wiz); } -#define vmg_wizard_id(W) SvUV((SV *) (W)) +#define vmg_wizard_id(W) SvIVX((const SV *) (W)) #define vmg_wizard_main_mgwiz(W) INT2PTR(const MGWIZ *, vmg_wizard_id(W)) /* ... Wizard destructor ................................................... */ @@ -582,8 +582,8 @@ STATIC int vmg_wizard_free(pTHX_ SV *sv, MAGIC *mg) { #if VMG_THREADSAFE -STATIC const MGWIZ *vmg_wizard_mgwiz(pTHX_ SV *wiz) { -#define vmg_wizard_mgwiz(W) vmg_wizard_mgwiz(aTHX_ ((SV *) (W))) +STATIC const MGWIZ *vmg_wizard_mgwiz(pTHX_ const SV *wiz) { +#define vmg_wizard_mgwiz(W) vmg_wizard_mgwiz(aTHX_ ((const SV *) (W))) const MGWIZ *w; w = vmg_wizard_main_mgwiz(wiz); @@ -604,8 +604,7 @@ STATIC const MGWIZ *vmg_wizard_mgwiz(pTHX_ SV *wiz) { /* --- User-level functions implementation --------------------------------- */ -STATIC const MAGIC *vmg_find(pTHX_ const SV *sv, SV *wiz) { -#define vmg_find(S, W) vmg_find(aTHX_ (S), (W)) +STATIC const MAGIC *vmg_find(const SV *sv, const SV *wiz) { const MAGIC *mg, *moremagic; UV wid; @@ -661,7 +660,7 @@ STATIC SV *vmg_data_new(pTHX_ SV *ctor, SV *sv, AV *args) { return nsv; } -STATIC SV *vmg_data_get(pTHX_ SV *sv, SV *wiz) { +STATIC SV *vmg_data_get(pTHX_ SV *sv, const SV *wiz) { #define vmg_data_get(S, W) vmg_data_get(aTHX_ (S), (W)) const MAGIC *mg = vmg_find(sv, wiz); return mg ? mg->mg_obj : NULL; @@ -684,7 +683,7 @@ STATIC void vmg_uvar_del(SV *sv, MAGIC *prevmagic, MAGIC *mg, MAGIC *moremagic) } #endif /* VMG_UVAR */ -STATIC UV vmg_cast(pTHX_ SV *sv, SV *wiz, AV *args) { +STATIC UV vmg_cast(pTHX_ SV *sv, const SV *wiz, AV *args) { #define vmg_cast(S, W, A) vmg_cast(aTHX_ (S), (W), (A)) MAGIC *mg, *moremagic = NULL; SV *data; @@ -766,7 +765,7 @@ done: return 1; } -STATIC UV vmg_dispell(pTHX_ SV *sv, SV *wiz) { +STATIC UV vmg_dispell(pTHX_ SV *sv, const SV *wiz) { #define vmg_dispell(S, W) vmg_dispell(aTHX_ (S), (W)) #if VMG_UVAR U32 uvars = 0; @@ -1426,7 +1425,6 @@ PREINIT: AV *args = NULL; SV *ret; CODE: - wiz = vmg_wizard_validate(wiz); if (items > 2) { I32 i; args = newAV(); @@ -1437,7 +1435,7 @@ CODE: if (av_store(args, i - 2, arg) == NULL) croak(vmg_argstorefailed); } } - ret = newSVuv(vmg_cast(SvRV(sv), wiz, args)); + ret = newSVuv(vmg_cast(SvRV(sv), vmg_wizard_validate(wiz), args)); SvREFCNT_dec(args); RETVAL = ret; OUTPUT: @@ -1449,8 +1447,7 @@ PROTOTYPE: \[$@%&*]$ PREINIT: SV *data; PPCODE: - wiz = vmg_wizard_validate(wiz); - data = vmg_data_get(SvRV(sv), wiz); + data = vmg_data_get(SvRV(sv), vmg_wizard_validate(wiz)); if (!data) XSRETURN_EMPTY; ST(0) = data; @@ -1459,7 +1456,6 @@ PPCODE: SV *dispell(SV *sv, SV *wiz) PROTOTYPE: \[$@%&*]$ CODE: - wiz = vmg_wizard_validate(wiz); - RETVAL = newSVuv(vmg_dispell(SvRV(sv), wiz)); + RETVAL = newSVuv(vmg_dispell(SvRV(sv), vmg_wizard_validate(wiz))); OUTPUT: RETVAL