X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FStorable%2FStorable.xs;h=24de05f88d24be8cf321a33f33c6a66b8c5ff543;hb=5e137bc214f9c21ed33df8110b67005fb915c4e7;hp=aa4b57dac8706e3302f5839fe4eefbddbe2a9f28;hpb=cecf5685359d1599cf3a31ed49f95b583ac5f0da;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/Storable/Storable.xs b/ext/Storable/Storable.xs index aa4b57d..24de05f 100644 --- a/ext/Storable/Storable.xs +++ b/ext/Storable/Storable.xs @@ -18,6 +18,9 @@ #endif #if !defined(PERL_VERSION) || PERL_VERSION < 8 +#define NEED_load_module +#define NEED_vload_module +#define NEED_newCONSTSUB #include "ppport.h" /* handle old perls */ #endif @@ -388,7 +391,7 @@ typedef struct stcxt { STMT_START { \ SV *self = newSV(sizeof(stcxt_t) - 1); \ SV *my_sv = newRV_noinc(self); \ - sv_bless(my_sv, gv_stashpv("Storable::Cxt", TRUE)); \ + sv_bless(my_sv, gv_stashpv("Storable::Cxt", GV_ADD)); \ cxt = (stcxt_t *)SvPVX(self); \ Zero(cxt, 1, stcxt_t); \ cxt->my_sv = my_sv; \ @@ -1047,7 +1050,7 @@ static const char byteorderstr_56[] = {BYTEORDER_BYTES_56, 0}; SV *ref; \ HV *stash; \ TRACEME(("blessing 0x%"UVxf" in %s", PTR2UV(s), (p))); \ - stash = gv_stashpv((p), TRUE); \ + stash = gv_stashpv((p), GV_ADD); \ ref = newRV_noinc(s); \ (void) sv_bless(ref, stash); \ SvRV_set(ref, NULL); \ @@ -1679,7 +1682,7 @@ static SV *pkg_fetchmeth( pTHX_ HV *cache, HV *pkg, - char *method) + const char *method) { GV *gv; SV *sv; @@ -1719,7 +1722,7 @@ static void pkg_hide( pTHX_ HV *cache, HV *pkg, - char *method) + const char *method) { const char *hvname = HvNAME_get(pkg); (void) hv_store(cache, @@ -1735,7 +1738,7 @@ static void pkg_uncache( pTHX_ HV *cache, HV *pkg, - char *method) + const char *method) { const char *hvname = HvNAME_get(pkg); (void) hv_delete(cache, hvname, strlen(hvname), G_DISCARD); @@ -1753,7 +1756,7 @@ static SV *pkg_can( pTHX_ HV *cache, HV *pkg, - char *method) + const char *method) { SV **svh; SV *sv; @@ -3431,7 +3434,9 @@ static int sv_type(pTHX_ SV *sv) { switch (SvTYPE(sv)) { case SVt_NULL: +#if PERL_VERSION <= 10 case SVt_IV: +#endif case SVt_NV: /* * No need to check for ROK, that can't be set here since there @@ -3439,7 +3444,11 @@ static int sv_type(pTHX_ SV *sv) */ return svis_SCALAR; case SVt_PV: +#if PERL_VERSION <= 10 case SVt_RV: +#else + case SVt_IV: +#endif case SVt_PVIV: case SVt_PVNV: /* @@ -4441,7 +4450,7 @@ static SV *retrieve_hook(pTHX_ stcxt_t *cxt, const char *cname) * into the existing design. -- RAM, 17/02/2001 */ - sv_magic(sv, rv, mtype, Nullch, 0); + sv_magic(sv, rv, mtype, (char *)NULL, 0); SvREFCNT_dec(rv); /* Undo refcnt inc from sv_magic() */ return sv; @@ -4494,7 +4503,7 @@ static SV *retrieve_ref(pTHX_ stcxt_t *cxt, const char *cname) if (cname) { /* No need to do anything, as rv will already be PVMG. */ - assert (SvTYPE(rv) >= SVt_RV); + assert (SvTYPE(rv) == SVt_RV || SvTYPE(rv) >= SVt_PV); } else { sv_upgrade(rv, SVt_RV); } @@ -4558,7 +4567,7 @@ static SV *retrieve_overloaded(pTHX_ stcxt_t *cxt, const char *cname) * WARNING: breaks RV encapsulation. */ - sv_upgrade(rv, SVt_RV); + SvUPGRADE(rv, SVt_RV); SvRV_set(rv, sv); /* $rv = \$sv */ SvROK_on(rv); @@ -4638,7 +4647,7 @@ static SV *retrieve_tied_array(pTHX_ stcxt_t *cxt, const char *cname) sv_upgrade(tv, SVt_PVAV); AvREAL_off((AV *)tv); - sv_magic(tv, sv, 'P', Nullch, 0); + sv_magic(tv, sv, 'P', (char *)NULL, 0); SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */ TRACEME(("ok (retrieve_tied_array at 0x%"UVxf")", PTR2UV(tv))); @@ -4666,7 +4675,7 @@ static SV *retrieve_tied_hash(pTHX_ stcxt_t *cxt, const char *cname) return (SV *) 0; /* Failed */ sv_upgrade(tv, SVt_PVHV); - sv_magic(tv, sv, 'P', Nullch, 0); + sv_magic(tv, sv, 'P', (char *)NULL, 0); SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */ TRACEME(("ok (retrieve_tied_hash at 0x%"UVxf")", PTR2UV(tv))); @@ -4698,7 +4707,7 @@ static SV *retrieve_tied_scalar(pTHX_ stcxt_t *cxt, const char *cname) } sv_upgrade(tv, SVt_PVMG); - sv_magic(tv, obj, 'q', Nullch, 0); + sv_magic(tv, obj, 'q', (char *)NULL, 0); if (obj) { /* Undo refcnt inc from sv_magic() */ @@ -4765,7 +4774,7 @@ static SV *retrieve_tied_idx(pTHX_ stcxt_t *cxt, const char *cname) RLEN(idx); /* Retrieve */ sv_upgrade(tv, SVt_PVMG); - sv_magic(tv, sv, 'p', Nullch, idx); + sv_magic(tv, sv, 'p', (char *)NULL, idx); SvREFCNT_dec(sv); /* Undo refcnt inc from sv_magic() */ return tv; @@ -6289,7 +6298,11 @@ static SV *dclone(pTHX_ SV *sv) * Tied elements seem to need special handling. */ - if (SvTYPE(sv) == SVt_PVLV && SvRMAGICAL(sv) && mg_find(sv, 'p')) { + if ((SvTYPE(sv) == SVt_PVLV +#if PERL_VERSION < 8 + || SvTYPE(sv) == SVt_PVMG +#endif + ) && SvRMAGICAL(sv) && mg_find(sv, 'p')) { mg_get(sv); } @@ -6377,7 +6390,7 @@ PROTOTYPES: ENABLE BOOT: { - HV *stash = gv_stashpvn("Storable", 8, TRUE); + HV *stash = gv_stashpvn("Storable", 8, GV_ADD); newCONSTSUB(stash, "BIN_MAJOR", newSViv(STORABLE_BIN_MAJOR)); newCONSTSUB(stash, "BIN_MINOR", newSViv(STORABLE_BIN_MINOR)); newCONSTSUB(stash, "BIN_WRITE_MINOR", newSViv(STORABLE_BIN_WRITE_MINOR));