X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB.xs;h=eca6f08870c718c0e8607c09125f275b76122f9b;hb=3826db83dfffbbaee62e51e9a0f052b407c24562;hp=6d5d2abdfdcb387e1ed0739a49d3d1a5ee502635;hpb=220fc49f9cd19ab777a22ef733671f0fbb81e6bd;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B.xs b/ext/B/B.xs index 6d5d2ab..eca6f08 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -463,6 +463,16 @@ cchar(pTHX_ SV *sv) return sstr; } +#if PERL_VERSION >= 9 +# define PMOP_pmreplstart(o) o->op_pmstashstartu.op_pmreplstart +# define PMOP_pmreplroot(o) o->op_pmreplrootu.op_pmreplroot +#else +# define PMOP_pmreplstart(o) o->op_pmreplstart +# define PMOP_pmreplroot(o) o->op_pmreplroot +# define PMOP_pmpermflags(o) o->op_pmpermflags +# define PMOP_pmdynflags(o) o->op_pmdynflags +#endif + static void walkoptree(pTHX_ SV *opsv, const char *method) { @@ -492,12 +502,7 @@ walkoptree(pTHX_ SV *opsv, const char *method) } } if (o && (cc_opclass(aTHX_ o) == OPc_PMOP) && o->op_type != OP_PUSHRE -#if PERL_VERSION >= 9 - && (kid = cPMOPo->op_pmreplrootu.op_pmreplroot) -#else - && (kid = cPMOPo->op_pmreplroot) -#endif - ) + && (kid = PMOP_pmreplroot(cPMOPo))) { sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid)); walkoptree(aTHX_ opsv, method); @@ -523,11 +528,7 @@ oplist(pTHX_ OP *o, SV **SP) XPUSHs(opsv); switch (o->op_type) { case OP_SUBST: -#if PERL_VERSION >= 9 - SP = oplist(aTHX_ cPMOPo->op_pmstashstartu.op_pmreplstart, SP); -#else - SP = oplist(aTHX_ cPMOPo->op_pmreplstart, SP); -#endif + SP = oplist(aTHX_ PMOP_pmreplstart(cPMOPo), SP); continue; case OP_SORT: if (o->op_flags & OPf_STACKED && o->op_flags & OPf_SPECIAL) { @@ -915,7 +916,7 @@ OP_type(o) #if PERL_VERSION >= 9 -U8 +U16 OP_opt(o) B::OP o @@ -937,7 +938,7 @@ OP_private(o) #if PERL_VERSION >= 9 -U8 +U16 OP_spare(o) B::OP o @@ -988,13 +989,6 @@ LISTOP_children(o) OUTPUT: RETVAL -#if PERL_VERSION >= 9 -# define PMOP_pmreplstart(o) o->op_pmstashstartu.op_pmreplstart -#else -# define PMOP_pmreplstart(o) o->op_pmreplstart -# define PMOP_pmpermflags(o) o->op_pmpermflags -# define PMOP_pmdynflags(o) o->op_pmdynflags -#endif #define PMOP_pmnext(o) o->op_pmnext #define PMOP_pmregexp(o) PM_GETRE(o) #ifdef USE_ITHREADS @@ -1121,7 +1115,7 @@ PMOP_reflags(o) ST(0) = sv_newmortal(); rx = PM_GETRE(o); if (rx) - sv_setuv(ST(0), rx->extflags); + sv_setuv(ST(0), RX_EXTFLAGS(rx)); #endif @@ -1142,7 +1136,7 @@ SVOP_gv(o) #define PADOP_sv(o) (o->op_padix ? PAD_SVl(o->op_padix) : Nullsv) #define PADOP_gv(o) ((o->op_padix \ && SvTYPE(PAD_SVl(o->op_padix)) == SVt_PVGV) \ - ? (GV*)PAD_SVl(o->op_padix) : Nullgv) + ? (GV*)PAD_SVl(o->op_padix) : (GV *)NULL) MODULE = B PACKAGE = B::PADOP PREFIX = PADOP_ @@ -1201,7 +1195,7 @@ B::OP LOOP_lastop(o) B::LOOP o -#define COP_label(o) o->cop_label +#define COP_label(o) CopLABEL(o) #define COP_stashpv(o) CopSTASHPV(o) #define COP_stash(o) CopSTASH(o) #define COP_file(o) CopFILE(o) @@ -1217,10 +1211,20 @@ LOOP_lastop(o) MODULE = B PACKAGE = B::COP PREFIX = COP_ +#if PERL_VERSION >= 11 + +const char * +COP_label(o) + B::COP o + +#else + char * COP_label(o) B::COP o +#endif + char * COP_stashpv(o) B::COP o @@ -1512,20 +1516,18 @@ MODULE = B PACKAGE = B::REGEXP IV REGEX(sv) - B::PVMG sv + B::REGEXP sv CODE: - RETVAL = PTR2IV(((struct xregexp *)SvANY(sv))->xrx_regexp); + /* FIXME - can we code this method more efficiently? */ + RETVAL = PTR2IV(sv); OUTPUT: RETVAL SV* precomp(sv) - B::PVMG sv - REGEXP* rx = NO_INIT + B::REGEXP sv CODE: - rx = ((struct xregexp *)SvANY(sv))->xrx_regexp; - /* FIXME - UTF-8? And the equivalent precomp methods? */ - RETVAL = newSVpvn( RX_PRECOMP(rx), RX_PRELEN(rx) ); + RETVAL = newSVpvn( RX_PRECOMP(sv), RX_PRELEN(sv) ); OUTPUT: RETVAL @@ -2013,7 +2015,7 @@ HvARRAY(hv) (void)hv_iterinit(hv); EXTEND(sp, HvKEYS(hv) * 2); while ((sv = hv_iternextsv(hv, &key, &len))) { - PUSHs(newSVpvn(key, len)); + mPUSHp(key, len); PUSHs(make_sv_object(aTHX_ sv_newmortal(), sv)); } }