X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=ext%2FB%2FB.xs;h=99c1409f9eccda02bb8b3a9f0178ebefd0c7fb6d;hb=584420f022db57225e9644b9c6668ff9f567984a;hp=eb7157b157a2a468a1fda13854b710d1d8e5e319;hpb=33972ad64a99b9ebe310f5ddfe85338f71fea66d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/ext/B/B.xs b/ext/B/B.xs index eb7157b..99c1409 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -251,6 +251,7 @@ make_sv_object(pTHX_ SV *arg, SV *sv) return arg; } +#if PERL_VERSION >= 9 static SV * make_temp_object(pTHX_ SV *arg, SV *temp) { @@ -313,6 +314,7 @@ make_cop_io_object(pTHX_ SV *arg, COP *cop) return make_sv_object(aTHX_ arg, NULL); } } +#endif static SV * make_mg_object(pTHX_ SV *arg, MAGIC *mg) @@ -485,7 +487,12 @@ walkoptree(pTHX_ SV *opsv, const char *method) } } if (o && (cc_opclass(aTHX_ o) == OPc_PMOP) && o->op_type != OP_PUSHRE - && (kid = cPMOPo->op_pmreplroot)) +#if PERL_VERSION >= 9 + && (kid = cPMOPo->op_pmreplrootu.op_pmreplroot) +#else + && (kid = cPMOPo->op_pmreplroot) +#endif + ) { sv_setiv(newSVrv(opsv, cc_opclassname(aTHX_ kid)), PTR2IV(kid)); walkoptree(aTHX_ opsv, method); @@ -511,7 +518,11 @@ 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 continue; case OP_SORT: if (o->op_flags & OPf_STACKED && o->op_flags & OPf_SPECIAL) { @@ -565,7 +576,9 @@ typedef IO *B__IO; typedef MAGIC *B__MAGIC; typedef HE *B__HE; +#if PERL_VERSION >= 9 typedef struct refcounted_he *B__RHE; +#endif MODULE = B PACKAGE = B PREFIX = B_ @@ -584,7 +597,6 @@ BOOT: specialsv_list[5] = (SV *) pWARN_NONE; specialsv_list[6] = (SV *) pWARN_STD; #if PERL_VERSION <= 8 -# define CVf_ASSERTION 0 # define OPpPAD_STATE 0 #endif #include "defsubs.h" @@ -623,9 +635,13 @@ B_init_av() B::AV B_check_av() +#if PERL_VERSION >= 9 + B::AV B_unitcheck_av() +#endif + B::AV B_begin_av() @@ -969,22 +985,27 @@ LISTOP_children(o) OUTPUT: RETVAL -#define PMOP_pmreplroot(o) o->op_pmreplroot -#define PMOP_pmreplstart(o) o->op_pmreplstart +#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 #define PMOP_pmoffset(o) o->op_pmoffset -#define PMOP_pmstashpv(o) o->op_pmstashpv +#define PMOP_pmstashpv(o) PmopSTASHPV(o); #else -#define PMOP_pmstash(o) o->op_pmstash +#define PMOP_pmstash(o) PmopSTASH(o); #endif #define PMOP_pmflags(o) o->op_pmflags -#define PMOP_pmpermflags(o) o->op_pmpermflags -#define PMOP_pmdynflags(o) o->op_pmdynflags MODULE = B PACKAGE = B::PMOP PREFIX = PMOP_ +#if PERL_VERSION <= 8 + void PMOP_pmreplroot(o) B::PMOP o @@ -994,26 +1015,55 @@ PMOP_pmreplroot(o) root = o->op_pmreplroot; /* OP_PUSHRE stores an SV* instead of an OP* in op_pmreplroot */ if (o->op_type == OP_PUSHRE) { -#ifdef USE_ITHREADS +# ifdef USE_ITHREADS sv_setiv(ST(0), INT2PTR(PADOFFSET,root) ); -#else +# else sv_setiv(newSVrv(ST(0), root ? svclassnames[SvTYPE((SV*)root)] : "B::SV"), PTR2IV(root)); -#endif +# endif } else { sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), PTR2IV(root)); } +#else + +void +PMOP_pmreplroot(o) + B::PMOP o + CODE: + ST(0) = sv_newmortal(); + if (o->op_type == OP_PUSHRE) { +# ifdef USE_ITHREADS + sv_setiv(ST(0), o->op_pmreplrootu.op_pmtargetoff); +# else + GV *const target = o->op_pmreplrootu.op_pmtargetgv; + sv_setiv(newSVrv(ST(0), target ? + svclassnames[SvTYPE((SV*)target)] : "B::SV"), + PTR2IV(target)); +# endif + } + else { + OP *const root = o->op_pmreplrootu.op_pmreplroot; + sv_setiv(newSVrv(ST(0), cc_opclassname(aTHX_ root)), + PTR2IV(root)); + } + +#endif + B::OP PMOP_pmreplstart(o) B::PMOP o +#if PERL_VERSION < 9 + B::PMOP PMOP_pmnext(o) B::PMOP o +#endif + #ifdef USE_ITHREADS IV @@ -1036,6 +1086,8 @@ U32 PMOP_pmflags(o) B::PMOP o +#if PERL_VERSION < 9 + U32 PMOP_pmpermflags(o) B::PMOP o @@ -1044,6 +1096,8 @@ U8 PMOP_pmdynflags(o) B::PMOP o +#endif + void PMOP_precomp(o) B::PMOP o @@ -1054,6 +1108,20 @@ PMOP_precomp(o) if (rx) sv_setpvn(ST(0), rx->precomp, rx->prelen); +#if PERL_VERSION >= 9 + +void +PMOP_reflags(o) + B::PMOP o + REGEXP * rx = NO_INIT + CODE: + ST(0) = sv_newmortal(); + rx = PM_GETRE(o); + if (rx) + sv_setuv(ST(0), rx->extflags); + +#endif + #define SVOP_sv(o) cSVOPo->op_sv #define SVOP_gv(o) ((GV*)cSVOPo->op_sv) @@ -1139,6 +1207,10 @@ LOOP_lastop(o) #define COP_arybase(o) CopARYBASE_get(o) #define COP_line(o) CopLINE(o) #define COP_hints(o) CopHINTS_get(o) +#if PERL_VERSION < 9 +# define COP_warnings(o) o->cop_warnings +# define COP_io(o) o->cop_io +#endif MODULE = B PACKAGE = B::COP PREFIX = COP_ @@ -1175,6 +1247,8 @@ U32 COP_line(o) B::COP o +#if PERL_VERSION >= 9 + void COP_warnings(o) B::COP o @@ -1189,10 +1263,6 @@ COP_io(o) ST(0) = make_cop_io_object(aTHX_ sv_newmortal(), o); XSRETURN(1); -U32 -COP_hints(o) - B::COP o - B::RHE COP_hints_hash(o) B::COP o @@ -1201,6 +1271,22 @@ COP_hints_hash(o) OUTPUT: RETVAL +#else + +B::SV +COP_warnings(o) + B::COP o + +B::SV +COP_io(o) + B::COP o + +#endif + +U32 +COP_hints(o) + B::COP o + MODULE = B PACKAGE = B::SV U32 @@ -1882,6 +1968,8 @@ HeSVKEY_force(he) MODULE = B PACKAGE = B::RHE PREFIX = RHE_ +#if PERL_VERSION >= 9 + SV* RHE_HASH(h) B::RHE h @@ -1889,3 +1977,5 @@ RHE_HASH(h) RETVAL = newRV( (SV*)Perl_refcounted_he_chain_2hv(aTHX_ h) ); OUTPUT: RETVAL + +#endif