Re: wrong line numbers in elsif()
Paul Johnson [Sat, 19 Apr 2008 13:02:06 +0000 (15:02 +0200)]
Message-ID: <20080419110206.GE32555@pjcj.net>

p4raw-id: //depot/perl@33714

ext/B/B/Deparse.pm
ext/B/t/deparse.t

index 64c6dc9..c7ed82d 100644 (file)
@@ -2589,6 +2589,12 @@ sub pp_cond_expr {
        my $newcond = $newop->first;
        my $newtrue = $newcond->sibling;
        $false = $newtrue->sibling; # last in chain is OP_AND => no else
+       if ($newcond->name eq "lineseq")
+       {
+           # lineseq to ensure correct line numbers in elsif()
+           # Bug #37302 fixed by change #33710.
+           $newcond = $newcond->first->sibling;
+       }
        $newcond = $self->deparse($newcond, 1);
        $newtrue = $self->deparse($newtrue, 0);
        push @elsifs, "elsif ($newcond) {\n\t$newtrue\n\b}";
index 5553df8..dce5034 100644 (file)
@@ -27,7 +27,7 @@ BEGIN {
     require feature;
     feature->import(':5.10');
 }
-use Test::More tests => 59;
+use Test::More tests => 60;
 
 use B::Deparse;
 my $deparse = B::Deparse->new();
@@ -409,3 +409,10 @@ given ('foo') {
     when ($_ ~~ 'quux') { continue; }
     default { 0; }
 }
+####
+# 53 conditions in elsifs (regression in change #33710 which fixed bug #37302)
+if ($a) { x(); }
+elsif ($b) { x(); }
+elsif ($a and $b) { x(); }
+elsif ($a or $b) { x(); }
+else { x(); }