diff options
author | Gurusamy Sarathy <gsar@cpan.org> | 1999-10-07 22:57:52 +0000 |
---|---|---|
committer | Gurusamy Sarathy <gsar@cpan.org> | 1999-10-07 22:57:52 +0000 |
commit | 38a230cb455fb1aca316039ba1d4aed58c0c60d5 (patch) | |
tree | 867dcdec0469ba7ff2832d2d367f0d22bda7c1c7 | |
parent | 2e20e14f06deb037c08540fe454d89e37322092d (diff) | |
download | perl-38a230cb455fb1aca316039ba1d4aed58c0c60d5.tar.gz |
change#3728 was flawed (loop contexts saw the wrong statement
info, causing loop control constructs to not find the label);
disable OP_SETSTATE entirely and add a fix that is specifically
targetted at disabling the OP_LINESEQ optimization in else BLOCK,
which was what the original patch was supposed to fix
TODO: remove the remainder of the setstate logic if it can't
be used anywhere else (it isn't used anywhere now)
p4raw-link: @3728 on //depot/perl: 7399586d384137f7ae66bcc82a83b0df7dd429e5
p4raw-id: //depot/perl@4309
-rw-r--r-- | cop.h | 4 | ||||
-rw-r--r-- | op.c | 6 | ||||
-rw-r--r-- | perly.c | 2 | ||||
-rw-r--r-- | perly.y | 2 |
4 files changed, 5 insertions, 9 deletions
@@ -129,8 +129,8 @@ struct block_loop { }; #define PUSHLOOP(cx, ivar, s) \ - cx->blk_loop.label = PL_curcop->cop_label; \ - cx->blk_loop.resetsp = s - PL_stack_base; \ + cx->blk_loop.label = PL_curcop->cop_label; \ + cx->blk_loop.resetsp = s - PL_stack_base; \ cx->blk_loop.redo_op = cLOOP->op_redoop; \ cx->blk_loop.next_op = cLOOP->op_nextop; \ cx->blk_loop.last_op = cLOOP->op_lastop; \ @@ -1860,11 +1860,7 @@ Perl_scope(pTHX_ OP *o) OP *kid; o->op_type = OP_SCOPE; o->op_ppaddr = PL_ppaddr[OP_SCOPE]; - kid = ((LISTOP*)o)->op_first; - if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE){ - kid->op_type = OP_SETSTATE; - kid->op_ppaddr = PL_ppaddr[OP_SETSTATE]; - } + null(((LISTOP*)o)->op_first); } else o = newLISTOP(OP_SCOPE, 0, o, Nullop); @@ -1662,7 +1662,7 @@ case 21: break; case 22: #line 203 "perly.y" -{ yyval.opval = scope(yyvsp[0].opval); } +{ (yyvsp[0].opval)->op_flags |= OPf_PARENS; yyval.opval = scope(yyvsp[0].opval); } break; case 23: #line 205 "perly.y" @@ -200,7 +200,7 @@ sideff : error else : /* NULL */ { $$ = Nullop; } | ELSE mblock - { $$ = scope($2); } + { ($2)->op_flags |= OPf_PARENS; $$ = scope($2); } | ELSIF '(' mexpr ')' mblock else { PL_copline = $1; $$ = newCONDOP(0, $3, scope($5), $6); |