diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1999-07-18 03:51:03 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-07-18 03:51:03 +0000 |
commit | 2c15bef39460c09b2a7846a30a4fc1fc1c4f93e4 (patch) | |
tree | 956621b9bd6ef82607bc2044a25afda197257cef /pp_ctl.c | |
parent | 2aa1486d5d3f3b27276656f9b9ef842d3a21a386 (diff) | |
download | perl-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.c | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -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; } |