]> git.vpit.fr Git - perl/modules/Sub-Nary.git/commitdiff
Fix a bug the handling of if (do { return if ; }) { ... }
authorVincent Pit <vince@profvince.com>
Fri, 8 Aug 2008 19:08:32 +0000 (21:08 +0200)
committerVincent Pit <vince@profvince.com>
Fri, 8 Aug 2008 19:08:32 +0000 (21:08 +0200)
lib/Sub/Nary.pm
samples/cx.pl
t/23-branch.t

index 611f780d617ad220649149b56ab64094db53cb59..50ba378034fa54a17ab6a2e4366926528aa3e52f 100644 (file)
@@ -273,7 +273,7 @@ sub inspect {
   if (null $op) {
    # If the logop has no else branch, it can also return the *scalar* result of
    # the conditional
-   $l3 = { 1 => $c };
+   $l3 = { 1 => 1 };
   } else {
    ($r3, $l3) = $self->inspect($op);
   }
index 69bef742f77521688e7da9e8f88f232822022682..8717d395ea41154cf06f4d477138397d0cfdc975 100755 (executable)
@@ -63,7 +63,7 @@ sub ifr {
 }
 
 my $code = \&wut;
-$code = sub { while (do { return 2, 3 }) { } };
+
 my $bd = B::Deparse->new();
 print STDERR $bd->coderef2text($code), "\n";
 
index 8aced0dca51e33f26e27fb8a9d98b5da2fd8735e..2f97ea8d604eed9f7591975ba6e9cf62d9ef40e3 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 16;
+use Test::More tests => 17;
 
 use Sub::Nary;
 
@@ -44,7 +44,7 @@ sub ret1234 {
  }
 }
 
-sub retinif {
+sub retinif1 {
  if (return 1, 2) {
   return 1, 2, 3
  } else {
@@ -52,6 +52,12 @@ sub retinif {
  }
 }
 
+sub retinif2 {
+ if (do { return 2, 3 if $x }) {
+  return 4, 5, 6;
+ }
+}
+
 my @tests = (
  [ \&ret12,                    { 1 => 0.5, 2 => 0.5 } ],
  [ \&ret12b,                   { 1 => 0.5, 2 => 0.5 } ],
@@ -73,7 +79,8 @@ my @tests = (
 
  [ \&ret1234, { 2 => 0.5, 3 => 0.25, 4 => 0.125, 1 => 0.125 } ],
 
- [ \&retinif, { 2 => 1 } ],
+ [ \&retinif1, { 2 => 1 } ],
+ [ \&retinif2, { 2 => 0.5, 3 => 0.25, 1 => 0.25 } ],
 );
 
 my $i = 1;