]> git.vpit.fr Git - perl/modules/Lexical-Types.git/commitdiff
Add support for PERL_OP_PARENT
authorVincent Pit <vince@profvince.com>
Sat, 4 Oct 2014 22:59:00 +0000 (00:59 +0200)
committerVincent Pit <vince@profvince.com>
Sat, 4 Oct 2014 22:59:00 +0000 (00:59 +0200)
This was introduced in perl 5.21.2.

Types.xs

index d37cdc7eabb0e5a311b0e9e6701e81e0dee0fdb6..02e5da71947dad06be2ab3c875f8eca5e2550949 100644 (file)
--- a/Types.xs
+++ b/Types.xs
 # 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;