From 657e3fc295aa125b47ffbdb93ddc43567f052b04 Mon Sep 17 00:00:00 2001 From: Nicholas Clark Date: Fri, 29 Oct 2010 17:08:24 +0100 Subject: [PATCH] Merge B::PMOP::pmoffset into the common B::OP accessor XS code. --- ext/B/B.xs | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/ext/B/B.xs b/ext/B/B.xs index 9818f8e..896eccc 100644 --- a/ext/B/B.xs +++ b/ext/B/B.xs @@ -835,6 +835,7 @@ threadsv_names() #define PADOFFSETp 0x10000 #define U8p 0x20000 #define U32p 0x30000 +#define IVp 0x40000 #define OP_next_ix OPp | offsetof(struct op, op_next) #define OP_sibling_ix OPp | offsetof(struct op, op_sibling) @@ -857,6 +858,10 @@ threadsv_names() #define PMOP_pmflags_ix U32p | offsetof(struct pmop, op_pmflags) +#ifdef USE_ITHREADS +#define PMOP_pmoffset_ix IVp | offsetof(struct pmop, op_pmoffset) +#endif + MODULE = B PACKAGE = B::OP PREFIX = OP_ size_t @@ -909,10 +914,23 @@ next(o) case (U8)(U32p >> 16): ret = sv_2mortal(newSVuv(*((U32*)ptr))); break; +#ifdef USE_ITHREADS + case (U8)(IVp >> 16): + ret = sv_2mortal(newSViv(*((IV*)ptr))); + break; +#endif } ST(0) = ret; XSRETURN(1); +BOOT: +{ +#ifdef USE_ITHREADS + CV *const cv = newXS("B::PMOP::pmoffset", XS_B__OP_next, __FILE__); + XSANY.any_i32 = PMOP_pmoffset_ix; +#endif +} + char * OP_name(o) B::OP o @@ -1000,7 +1018,6 @@ LISTOP_children(o) RETVAL #ifdef USE_ITHREADS -#define PMOP_pmoffset(o) o->op_pmoffset #define PMOP_pmstashpv(o) PmopSTASHPV(o); #else #define PMOP_pmstash(o) PmopSTASH(o); @@ -1059,10 +1076,6 @@ PMOP_pmreplroot(o) #ifdef USE_ITHREADS -IV -PMOP_pmoffset(o) - B::PMOP o - char* PMOP_pmstashpv(o) B::PMOP o -- 2.7.4