# 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
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));
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
/* 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: {
&& 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;