From: Vincent Pit Date: Sat, 4 Oct 2014 22:59:00 +0000 (+0200) Subject: Add support for PERL_OP_PARENT X-Git-Tag: v0.13~4 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FLexical-Types.git;a=commitdiff_plain;h=d3cb9f3bbe0d0ce0841b21fea6834f8ecc11b67b Add support for PERL_OP_PARENT This was introduced in perl 5.21.2. --- diff --git a/Types.xs b/Types.xs index d37cdc7..02e5da7 100644 --- a/Types.xs +++ b/Types.xs @@ -39,6 +39,10 @@ # define HvNAMELEN_get(H) strlen(HvNAME_get(H)) #endif +#ifndef OP_SIBLING +# define OP_SIBLING(O) ((O)->op_sibling) +#endif + #ifndef SvREFCNT_inc_simple_void_NN # define SvREFCNT_inc_simple_void_NN(S) ((void) SvREFCNT_inc(S)) #endif @@ -683,7 +687,7 @@ STATIC OP *lt_pp_padrange(pTHX) { base = PL_op->op_targ; count = PL_op->op_private & OPpPADRANGE_COUNTMASK; - for (i = 0, p = roi.padxv_start; i < count && p; ++i, p = p->op_sibling) { + for (i = 0, p = roi.padxv_start; i < count && p; ++i, p = OP_SIBLING(p)) { lt_op_padxv_info oi; if (p->op_type == OP_PADSV && lt_padxv_map_fetch(p, &oi)) lt_op_padxv_info_call(&oi, PAD_SV(base + i)); @@ -802,7 +806,7 @@ STATIC int lt_maybe_padrange_setup(pTHX_ OP *o, const OP *start) { count = o->op_private & OPpPADRANGE_COUNTMASK; - for (i = 0, p = start; i < count && p; ++i, p = p->op_sibling) { + for (i = 0, p = start; i < count && p; ++i, p = OP_SIBLING(p)) { if (p->op_type == OP_PADSV) { /* In a padrange sequence, either all lexicals are typed, or none are. * Thus we can stop at the first padsv op. However, note that these @@ -855,7 +859,7 @@ STATIC void lt_peep_rec(pTHX_ OP *o, ptable *seen) { /* A padrange op is guaranteed to have previously been a pushmark. * Moreover, for non-special padrange ops (i.e. that aren't for * my (...) = @_), the original padxv ops are its siblings. */ - lt_maybe_padrange_setup(o, o->op_sibling); + lt_maybe_padrange_setup(o, OP_SIBLING(o)); } break; case OP_AASSIGN: { @@ -868,7 +872,7 @@ STATIC void lt_peep_rec(pTHX_ OP *o, ptable *seen) { && op->op_flags & OPf_SPECIAL) { const OP *start = cUNOPx(cBINOPo->op_last)->op_first; if (start->op_type == OP_PUSHMARK) - start = start->op_sibling; + start = OP_SIBLING(start); lt_maybe_padrange_setup(op, start); } break;