1 --- Params-Classify-0.013a/lib/Params/Classify.xs 2010-11-16 15:35:47.000000000 -0500
2 +++ Params-Classify-0.013b/lib/Params/Classify.xs 2017-03-26 15:38:12.384693301 -0400
4 # define FPTR2DPTR(t,x) ((t)(UV)(x))
5 #endif /* !FPTR2DPTR */
8 +# define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling))
12 +# define OpSIBLING(o) (0 + (o)->op_sibling)
15 +#ifndef OpMORESIB_set
16 +# define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib))
19 +#ifndef OpLASTSIB_set
20 +# define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL)
23 +#ifndef OpMAYBESIB_set
24 +# define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
29 struct q_ptr_tbl_ent {
33 pushop = cUNOPx(op)->op_first;
34 - if(!pushop->op_sibling) pushop = cUNOPx(pushop)->op_first;
35 - for(cvop = pushop; cvop->op_sibling; cvop = cvop->op_sibling) ;
36 + if(!OpHAS_SIBLING(pushop)) pushop = cUNOPx(pushop)->op_first;
37 + for(cvop = pushop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ;
38 if(!(cvop->op_type == OP_RV2CV &&
39 !(cvop->op_private & OPpENTERSUB_AMPER) &&
40 (cv = rvop_cv(cUNOPx(cvop)->op_first)) &&
42 return nxck_entersub(aTHX_ op);
43 cvflags = CvXSUBANY(cv).any_i32;
44 op = nxck_entersub(aTHX_ op); /* for prototype checking */
45 - aop = pushop->op_sibling;
46 - bop = aop->op_sibling;
47 + aop = OpSIBLING(pushop);
48 + bop = OpSIBLING(aop);
50 if(!(cvflags & PC_ALLOW_UNARY)) return op;
52 - pushop->op_sibling = bop;
53 - aop->op_sibling = NULL;
54 + OpLASTSIB_set(pushop, bop);
55 + OpLASTSIB_set(aop, NULL);
57 op = newUNOP(OP_NULL, 0, aop);
58 op->op_type = OP_RAND;
59 op->op_ppaddr = ppfunc;
60 op->op_private = (U8)cvflags;
62 - } else if(bop && bop->op_sibling == cvop) {
63 + } else if(bop && OpSIBLING(op) == cvop) {
64 if(!(cvflags & PC_ALLOW_BINARY)) return op;
65 if(ppfunc == THX_pp_check_sclass &&
66 (cvflags & PC_TYPE_MASK) == SCLASS_REF) {
68 cvflags &= ~PC_TYPE_MASK;
69 ppfunc = THX_pp_check_dyn_battr;
71 - pushop->op_sibling = cvop;
72 - aop->op_sibling = NULL;
73 - bop->op_sibling = NULL;
74 + OpLASTSIB_set(pushop, cvop);
75 + OpLASTSIB_set(aop, NULL);
76 + OpLASTSIB_set(bop, NULL);
78 op = newBINOP(OP_NULL, 0, aop, bop);
79 op->op_type = OP_RAND;