X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FSub-Nary.git;a=blobdiff_plain;f=lib%2FSub%2FNary.pm;fp=lib%2FSub%2FNary.pm;h=159dd8e6bc9a31fb753478eec7c573feb852bad1;hp=f789e696c1796665076cec790c2a915da7afb333;hb=3a7f23b3ef06db23f3bd2f2707e70b61c6a15b4f;hpb=f7ae222ad94ed89e55b76c4eebcbdb38077133c1 diff --git a/lib/Sub/Nary.pm b/lib/Sub/Nary.pm index f789e69..159dd8e 100644 --- a/lib/Sub/Nary.pm +++ b/lib/Sub/Nary.pm @@ -426,6 +426,20 @@ sub pp_exit { return $r, undef; } +sub pp_die { + my ($self, $op) = @_; + + my ($r, undef) = $self->inspect_kids($op); + if (defined $r) { + my $c = 1 - count $r; + $r->{die} = $c if $c; + } else { + $r = { die => 1 }; + } + + return $r, undef; +} + sub pp_goto { my ($self, $op) = @_; @@ -503,6 +517,18 @@ sub pp_aassign { $self->inspect($op); } +sub pp_leavetry { + my ($self, $op) = @_; + + my ($r, $l) = $self->inspect_kids($op); + if (defined $r) { + my $d = delete $r->{die}; + $r->{0} += $d if defined $d; + } + + return $r, $l; +} + sub pp_leaveloop { my ($self, $op) = @_;