change#3692 had an unintentional patch leak through!
Gurusamy Sarathy [Mon, 2 Aug 1999 08:13:16 +0000 (08:13 +0000)]
(this would explain the mysterious C<next LABEL> failures
people have seen)

p4raw-link: @3692 on //depot/perl: 2c15bef39460c09b2a7846a30a4fc1fc1c4f93e4

p4raw-id: //depot/perl@3878

pp_ctl.c

index d88399e..2d29448 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1921,32 +1921,29 @@ S_dofindlabel(pTHX_ OP *o, char *label, OP **opstack, OP **oplimit)
        *ops++ = cUNOPo->op_first;
        if (ops >= oplimit)
            Perl_croak(aTHX_ too_deep);
-       *ops = 0;
     }
+    *ops = 0;
     if (o->op_flags & OPf_KIDS) {
        dTHR;
        /* First try all the kids at this level, since that's likeliest. */
        for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
-           if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
-               && kCOP->cop_label && strEQ(kCOP->cop_label, label))
-           {
+           if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
+                   kCOP->cop_label && strEQ(kCOP->cop_label, label))
                return kid;
-           }
        }
        for (kid = cUNOPo->op_first; kid; kid = kid->op_sibling) {
            if (kid == PL_lastgotoprobe)
                continue;
-           if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)
-               && (ops == opstack || (ops[-1]->op_type != OP_NEXTSTATE
-                                      && ops[-1]->op_type != OP_DBSTATE)))
-           {
+           if ((kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) &&
+               (ops == opstack ||
+                (ops[-1]->op_type != OP_NEXTSTATE &&
+                 ops[-1]->op_type != OP_DBSTATE)))
                *ops++ = kid;
-               *ops = 0;
-           }
            if (o = dofindlabel(kid, label, ops, oplimit))
                return o;
        }
     }
+    *ops = 0;
     return 0;
 }