#define OP_GIMME_REVERSE(G) su_op_gimme_reverse(G)
#endif
-#ifndef OP_SIBLING
-# define OP_SIBLING(O) ((O)->op_sibling)
+#ifndef OpSIBLING
+# ifdef OP_SIBLING
+# define OpSIBLING(O) OP_SIBLING(O)
+# else
+# define OpSIBLING(O) ((O)->op_sibling)
+# endif
#endif
#ifndef PERL_MAGIC_tied
}
STATIC int su_uplevel_goto_static(const OP *o) {
- for (; o; o = OP_SIBLING(o)) {
+ for (; o; o = OpSIBLING(o)) {
/* goto ops are unops with kids. */
if (!(o->op_flags & OPf_KIDS))
continue;
* depth to be 0, or perl would complain about it being "still in use".
* But we *know* that it cannot be so. */
if (sud->renamed) {
- CvDEPTH(sud->renamed) = 0;
- CvPADLIST(sud->renamed) = NULL;
+ if (!CvISXSUB(sud->renamed)) {
+ CvDEPTH(sud->renamed) = 0;
+ CvPADLIST(sud->renamed) = NULL;
+ }
SvREFCNT_dec(sud->renamed);
}
CvROOT(cv) = OpREFCNT_inc(CvROOT(proto));
OP_REFCNT_UNLOCK;
CvSTART(cv) = CvSTART(proto);
+ CvPADLIST(cv) = CvPADLIST(proto);
}
CvOUTSIDE(cv) = CvOUTSIDE(proto);
#ifdef CVf_WEAKOUTSIDE
if (!(CvFLAGS(proto) & CVf_WEAKOUTSIDE))
#endif
SvREFCNT_inc_simple_void(CvOUTSIDE(cv));
- CvPADLIST(cv) = CvPADLIST(proto);
#ifdef CvOUTSIDE_SEQ
CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto);
#endif
return cxix - 1;
break;
case CXt_SUBST:
- if (cx->blk_oldcop && OP_SIBLING(cx->blk_oldcop)
- && OP_SIBLING(cx->blk_oldcop)->op_type == OP_SUBST)
+ if (cx->blk_oldcop && OpSIBLING(cx->blk_oldcop)
+ && OpSIBLING(cx->blk_oldcop)->op_type == OP_SUBST)
return cxix - 1;
break;
}
return cxix + 1;
break;
case CXt_SUBST:
- if (next->blk_oldcop && OP_SIBLING(next->blk_oldcop)
- && OP_SIBLING(next->blk_oldcop)->op_type == OP_SUBST)
+ if (next->blk_oldcop && OpSIBLING(next->blk_oldcop)
+ && OpSIBLING(next->blk_oldcop)->op_type == OP_SUBST)
return cxix + 1;
break;
}
#endif
case CXt_SUBST: {
const COP *cop = cx->blk_oldcop;
- if (cop && OP_SIBLING(cop)) {
- switch (OP_SIBLING(cop)->op_flags & OPf_WANT) {
+ if (cop && OpSIBLING(cop)) {
+ switch (OpSIBLING(cop)->op_flags & OPf_WANT) {
case OPf_WANT_VOID:
return G_VOID;
case OPf_WANT_SCALAR:
dXSARGS;
#endif
dMY_CXT;
- I32 cxix;
PERL_UNUSED_VAR(cv); /* -W */
PERL_UNUSED_VAR(ax); /* -Wall */