diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2008-04-18 10:42:17 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2008-04-18 10:42:17 +0000 |
commit | f6f3a1fea2bda9d33f9cc5367b630a21738c9def (patch) | |
tree | d113d69c2395fb2e70865ba53b0fd509fb2de441 | |
parent | 12e06b6fd7025de6faae2a6f788653cc97790444 (diff) | |
download | perl-f6f3a1fea2bda9d33f9cc5367b630a21738c9def.tar.gz |
Fix the line-number-in-elsif longstanding bug.
This patch does two things :
- newSTATEOP now nullifies the state op it
just created if OPf_SPECIAL is passed to it
in flags
- the parser now inserts a nullified stateop
in the expression block of an elsif
p4raw-id: //depot/perl@33710
-rw-r--r-- | op.c | 2 | ||||
-rw-r--r-- | perly.act | 2 | ||||
-rw-r--r-- | perly.y | 2 | ||||
-rw-r--r-- | t/lib/warnings/9uninit | 1 |
4 files changed, 4 insertions, 3 deletions
@@ -4419,6 +4419,8 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) } } + if (flags & OPf_SPECIAL) + op_null((OP*)cop); return prepend_elem(OP_LINESEQ, (OP*)cop, o); } @@ -186,7 +186,7 @@ case 2: case 27: #line 277 "perly.y" { PL_parser->copline = (line_t)IVAL((ps[(1) - (6)].val.i_tkval)); - (yyval.opval) = newCONDOP(0, (ps[(3) - (6)].val.opval), scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval)); + (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[(3) - (6)].val.opval)), scope((ps[(5) - (6)].val.opval)), (ps[(6) - (6)].val.opval)); PL_hints |= HINT_BLOCK_SCOPE; TOKEN_GETMAD((ps[(1) - (6)].val.i_tkval),(yyval.opval),'I'); TOKEN_GETMAD((ps[(2) - (6)].val.i_tkval),(yyval.opval),'('); @@ -275,7 +275,7 @@ else : /* NULL */ } | ELSIF '(' mexpr ')' mblock else { PL_parser->copline = (line_t)IVAL($1); - $$ = newCONDOP(0, $3, scope($5), $6); + $$ = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,$3), scope($5), $6); PL_hints |= HINT_BLOCK_SCOPE; TOKEN_GETMAD($1,$$,'I'); TOKEN_GETMAD($2,$$,'('); diff --git a/t/lib/warnings/9uninit b/t/lib/warnings/9uninit index fea20f0dca..570290a0cc 100644 --- a/t/lib/warnings/9uninit +++ b/t/lib/warnings/9uninit @@ -1322,7 +1322,6 @@ exit $m1; EXPECT Use of uninitialized value $m1 in exit at - line 4. ######## -# TODO long standing bug - PL_curcop is not updated before the elsif use warnings 'uninitialized'; my $undef; |