<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">commit 0d301779bd42da52b4f8e13a667499846fc2cc55
Author: Reini Urban &lt;rurban@cpanel.net&gt;
Date:   Tue Jun 14 17:08:24 2016 +0200

    Fix 5.25 or 5.22/24 with PERL_OP_PARENT
    
    Fixes RT #114490

diff --git a/lib/Params/Classify.xs b/lib/Params/Classify.xs
index 15a5ad5..f4012fd 100644
--- a/lib/Params/Classify.xs
+++ b/lib/Params/Classify.xs
@@ -123,6 +123,22 @@ static void *THX_ptr_table_fetch(pTHX_ PTR_TBL_t *tbl, void *from)
 # define sv_is_regexp(sv) 0
 #endif /* &lt;5.11.0 */
 
+
+#ifndef OpSIBLING
+# ifdef PERL_OP_PARENT
+#  define OpSIBLING(o)		(0 + (o)-&gt;op_moresib ? (o)-&gt;op_sibparent : NULL)
+#  define OpMAYBESIB_set(o, sib, parent) \
+       ((o)-&gt;op_sibparent = ((o)-&gt;op_moresib = cBOOL(sib)) ? (sib) : (parent))
+# else
+#  define OpSIBLING(o)		(0 + (o)-&gt;op_sibling)
+#  if PERL_VERSION_GE(5,11,0)
+#    define OpMAYBESIB_set(o, sib, parent) ((o)-&gt;op_sibling = (sib))
+#  else
+#    define OpMAYBESIB_set(o, sib, parent) ((o)-&gt;op_moresib = cBOOL(sib), (o)-&gt;op_sibling = (sib))
+#  endif
+# endif
+#endif
+
 #define sv_is_undef(sv) (!sv_is_glob(sv) &amp;&amp; !sv_is_regexp(sv) &amp;&amp; !SvOK(sv))
 
 #define sv_is_string(sv) \
@@ -631,8 +647,8 @@ static OP *myck_entersub(pTHX_ OP *op)
 	OP *(*ppfunc)(pTHX);
 	I32 cvflags;
 	pushop = cUNOPx(op)-&gt;op_first;
-	if(!pushop-&gt;op_sibling) pushop = cUNOPx(pushop)-&gt;op_first;
-	for(cvop = pushop; cvop-&gt;op_sibling; cvop = cvop-&gt;op_sibling) ;
+	if(!OpSIBLING(pushop)) pushop = cUNOPx(pushop)-&gt;op_first;
+	for(cvop = pushop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ;
 	if(!(cvop-&gt;op_type == OP_RV2CV &amp;&amp;
 			!(cvop-&gt;op_private &amp; OPpENTERSUB_AMPER) &amp;&amp;
 			(cv = rvop_cv(cUNOPx(cvop)-&gt;op_first)) &amp;&amp;
@@ -641,20 +657,20 @@ static OP *myck_entersub(pTHX_ OP *op)
 		return nxck_entersub(aTHX_ op);
 	cvflags = CvXSUBANY(cv).any_i32;
 	op = nxck_entersub(aTHX_ op);   /* for prototype checking */
-	aop = pushop-&gt;op_sibling;
-	bop = aop-&gt;op_sibling;
+	aop = OpSIBLING(pushop);
+	bop = OpSIBLING(aop);
 	if(bop == cvop) {
 		if(!(cvflags &amp; PC_ALLOW_UNARY)) return op;
 		unary:
-		pushop-&gt;op_sibling = bop;
-		aop-&gt;op_sibling = NULL;
+		OpMAYBESIB_set(pushop, bop, NULL);
+		OpMAYBESIB_set(aop, NULL, NULL);
 		op_free(op);
 		op = newUNOP(OP_NULL, 0, aop);
 		op-&gt;op_type = OP_RAND;
 		op-&gt;op_ppaddr = ppfunc;
 		op-&gt;op_private = (U8)cvflags;
 		return op;
-	} else if(bop &amp;&amp; bop-&gt;op_sibling == cvop) {
+	} else if(bop &amp;&amp; OpSIBLING(bop) == cvop) {
 		if(!(cvflags &amp; PC_ALLOW_BINARY)) return op;
 		if(ppfunc == THX_pp_check_sclass &amp;&amp;
 				(cvflags &amp; PC_TYPE_MASK) == SCLASS_REF) {
@@ -673,9 +689,9 @@ static OP *myck_entersub(pTHX_ OP *op)
 			cvflags &amp;= ~PC_TYPE_MASK;
 			ppfunc = THX_pp_check_dyn_battr;
 		}
-		pushop-&gt;op_sibling = cvop;
-		aop-&gt;op_sibling = NULL;
-		bop-&gt;op_sibling = NULL;
+		OpMAYBESIB_set(pushop, cvop, NULL);
+		OpMAYBESIB_set(aop, NULL, NULL);
+		OpMAYBESIB_set(bop, NULL, NULL);
 		op_free(op);
 		op = newBINOP(OP_NULL, 0, aop, bop);
 		op-&gt;op_type = OP_RAND;
</pre></body></html>