]> git.pld-linux.org Git - packages/perl-Params-Classify.git/blob - op_sibling_fixes.patch
98dd25e482dfff6462f459319720084716e6ed39
[packages/perl-Params-Classify.git] / op_sibling_fixes.patch
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
3 @@ -41,6 +41,26 @@
4  # define FPTR2DPTR(t,x) ((t)(UV)(x))
5  #endif /* !FPTR2DPTR */
6  
7 +#ifndef OpHAS_SIBLING
8 +#  define OpHAS_SIBLING(o)               (cBOOL((o)->op_sibling))
9 +#endif
10 +
11 +#ifndef OpSIBLING
12 +#  define OpSIBLING(o)                   (0 + (o)->op_sibling)
13 +#endif
14 +
15 +#ifndef OpMORESIB_set
16 +#  define OpMORESIB_set(o, sib)          ((o)->op_sibling = (sib))
17 +#endif
18 +
19 +#ifndef OpLASTSIB_set
20 +#  define OpLASTSIB_set(o, parent)       ((o)->op_sibling = NULL)
21 +#endif
22 +
23 +#ifndef OpMAYBESIB_set
24 +#  define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
25 +#endif
26 +
27  #ifndef ptr_table_new
28  
29  struct q_ptr_tbl_ent {
30 @@ -625,8 +645,8 @@
31         OP *(*ppfunc)(pTHX);
32         I32 cvflags;
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)) &&
41 @@ -635,20 +655,20 @@
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);
49         if(bop == cvop) {
50                 if(!(cvflags & PC_ALLOW_UNARY)) return op;
51                 unary:
52 -               pushop->op_sibling = bop;
53 -               aop->op_sibling = NULL;
54 +               OpLASTSIB_set(pushop, bop);
55 +               OpLASTSIB_set(aop, NULL);
56                 op_free(op);
57                 op = newUNOP(OP_NULL, 0, aop);
58                 op->op_type = OP_RAND;
59                 op->op_ppaddr = ppfunc;
60                 op->op_private = (U8)cvflags;
61                 return op;
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) {
67 @@ -667,9 +687,9 @@
68                         cvflags &= ~PC_TYPE_MASK;
69                         ppfunc = THX_pp_check_dyn_battr;
70                 }
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);
77                 op_free(op);
78                 op = newBINOP(OP_NULL, 0, aop, bop);
79                 op->op_type = OP_RAND;
This page took 0.051883 seconds and 2 git commands to generate.