X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB.xs;h=eca6f08870c718c0e8607c09125f275b76122f9b;hb=597c4554ca87aa4325a00c70a0fbb22acbfcfa07;hp=aa02d540c8ea22efc624014f089e1c6bd4c65a14;hpb=4df7f6afd80e96d28fd18bba9dda8b38b6ed6700;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B.xs b/ext/B/B.xs index aa02d54..eca6f08 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -37,7 +37,7 @@ static const char* const svclassnames[] = { "B::BM", #endif #if PERL_VERSION >= 11 - "B::ORANGE", + "B::REGEXP", #endif #if PERL_VERSION >= 9 "B::GV", @@ -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) { @@ -569,6 +570,9 @@ typedef SV *B__IV; typedef SV *B__PV; typedef SV *B__NV; typedef SV *B__PVMG; +#if PERL_VERSION >= 11 +typedef SV *B__REGEXP; +#endif typedef SV *B__PVLV; typedef SV *B__BM; typedef SV *B__RV; @@ -912,7 +916,7 @@ OP_type(o) #if PERL_VERSION >= 9 -U8 +U16 OP_opt(o) B::OP o @@ -934,7 +938,7 @@ OP_private(o) #if PERL_VERSION >= 9 -U8 +U16 OP_spare(o) B::OP o @@ -985,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 @@ -1106,7 +1103,7 @@ PMOP_precomp(o) ST(0) = sv_newmortal(); rx = PM_GETRE(o); if (rx) - sv_setpvn(ST(0), rx->precomp, rx->prelen); + sv_setpvn(ST(0), RX_PRECOMP(rx), RX_PRELEN(rx)); #if PERL_VERSION >= 9 @@ -1118,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 @@ -1139,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_ @@ -1198,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) @@ -1214,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 @@ -1503,6 +1510,29 @@ B::HV SvSTASH(sv) B::PVMG sv +MODULE = B PACKAGE = B::REGEXP + +#if PERL_VERSION >= 11 + +IV +REGEX(sv) + B::REGEXP sv + CODE: + /* FIXME - can we code this method more efficiently? */ + RETVAL = PTR2IV(sv); + OUTPUT: + RETVAL + +SV* +precomp(sv) + B::REGEXP sv + CODE: + RETVAL = newSVpvn( RX_PRECOMP(sv), RX_PRELEN(sv) ); + OUTPUT: + RETVAL + +#endif + #define MgMOREMAGIC(mg) mg->mg_moremagic #define MgPRIVATE(mg) mg->mg_private #define MgTYPE(mg) mg->mg_type @@ -1563,7 +1593,7 @@ precomp(mg) REGEXP* rx = (REGEXP*)mg->mg_obj; RETVAL = Nullsv; if( rx ) - RETVAL = newSVpvn( rx->precomp, rx->prelen ); + RETVAL = newSVpvn( RX_PRECOMP(rx), RX_PRELEN(rx) ); } else { croak( "precomp is only meaningful on r-magic" ); @@ -1985,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)); } }