X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FSub%2FNary.pm;h=2b9b6719ebbf6c79fef5f7370e0da270166a2a43;hb=efc5762598689b6ee22dfc8ad29f4e8a22457c0a;hp=838fab0c7cfd79dfa807c6473311439894f7a872;hpb=1757c35d2d60dd9b52dcbd5af09679cfdaeb1740;p=perl%2Fmodules%2FSub-Nary.git diff --git a/lib/Sub/Nary.pm b/lib/Sub/Nary.pm index 838fab0..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; } @@ -453,6 +448,15 @@ sub pp_rv2av { $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 { my ($self, $op) = @_;