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
};
#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; \
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);
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"
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);