summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>1999-07-18 03:51:03 +0000
committerGurusamy Sarathy <gsar@cpan.org>1999-07-18 03:51:03 +0000
commit2c15bef39460c09b2a7846a30a4fc1fc1c4f93e4 (patch)
tree956621b9bd6ef82607bc2044a25afda197257cef /pp_ctl.c
parent2aa1486d5d3f3b27276656f9b9ef842d3a21a386 (diff)
downloadperl-2c15bef39460c09b2a7846a30a4fc1fc1c4f93e4.tar.gz
remove spurious newSTATEOP() that causes goto to enter one too many
contexts when jumping between if and elsif blocks p4raw-id: //depot/perl@3692
Diffstat (limited to 'pp_ctl.c')
-rw-r--r--pp_ctl.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 60d778b5a1..f94bd54b89 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -1916,29 +1916,32 @@ 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;
}