X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FSub%2FNary.pm;h=2b9b6719ebbf6c79fef5f7370e0da270166a2a43;hb=efc5762598689b6ee22dfc8ad29f4e8a22457c0a;hp=ef92fa178aab2f41bef787150aae2aec7b6ffca1;hpb=84483a1d32823197ca6c6dcb5e839e8d5650e9e4;p=perl%2Fmodules%2FSub-Nary.git diff --git a/lib/Sub/Nary.pm b/lib/Sub/Nary.pm index ef92fa1..2b9b671 100644 --- a/lib/Sub/Nary.pm +++ b/lib/Sub/Nary.pm @@ -15,13 +15,13 @@ Sub::Nary - Try to count how many elements a subroutine can return in list conte =head1 VERSION -Version 0.02 +Version 0.03 =cut our $VERSION; BEGIN { - $VERSION = '0.02'; + $VERSION = '0.03'; } =head1 SYNOPSIS @@ -353,14 +353,9 @@ sub pp_entersub { my $r; my $c = 1; for (; not null $op->sibling; $op = $op->sibling) { - my $n = name($op); - next if $n eq 'nextstate'; my ($rc, $lc) = $self->inspect($op); - $r = add $r, scale $c, $rc if defined $rc; - if (zero $lc) { - $c = 1 - count $r; - return $r, $c ? { 0 => $c } : undef - } + return $rc, $lc if defined $rc and not defined $lc; + $r = add $r, scale $c, $rc; $c *= count $lc; } @@ -446,12 +441,20 @@ sub pp_rv2av { my ($self, $op) = @_; $op = $op->first; - my ($r, $l) = $self->inspect($op); - if (name($op) ne 'const') { - my $c = 1 - count $r; - $l = $c ? { list => $c } : 0; + if (name($op) eq 'gv') { + return undef, { list => 1 }; } - return $r, $l; + + $self->inspect($op); +} + +sub pp_sassign { + my ($self, $op) = @_; + + my $r = ($self->inspect($op->first))[0]; + + my $c = 1 - count $r; + return $r, $c ? { 1 => $c } : undef } sub pp_aassign {