Author: bernhard Date: Tue Nov 6 09:03:56 2007 New Revision: 22736 Modified: trunk/languages/scheme/lib/Scheme/Parser.pm
Log: [Scheme] Use wantarray() in _build_tree(). First time I ever used wantarray(). Modified: trunk/languages/scheme/lib/Scheme/Parser.pm ============================================================================== --- trunk/languages/scheme/lib/Scheme/Parser.pm (original) +++ trunk/languages/scheme/lib/Scheme/Parser.pm Tue Nov 6 09:03:56 2007 @@ -16,6 +16,15 @@ sub _build_tree { my ( $tokenizer ) = @_; + if ( wantarray() ) { + my @trees; + while ( my $tree = _build_tree( $tokenizer ) ) { + push @trees, $tree; + } + + return @trees; + } + my $token = $tokenizer->(); return unless $token; @@ -23,10 +32,7 @@ return if $token->[1] eq ')'; if ( $token->[1] eq '(' ) { - my @children; - while ( my $child = _build_tree( $tokenizer ) ) { - push @children, $child; - } + my @children = _build_tree( $tokenizer ); if ( ! @children ) { # special case: empty list @@ -44,15 +50,12 @@ q{,@} => 'unquote-splicing', ); if ( exists $function{$token->[1]} ) { - my $tree = { children => [ { value => $function{$token->[1]} - } - ] - }; - while ( my $child = _build_tree( $tokenizer ) ) { - push @{ $tree->{children} }, $child; - } + return { children => [ { value => $function{$token->[1]} + }, + _build_tree( $tokenizer ) + ] + }; - return $tree; } # the atomic case @@ -63,10 +66,7 @@ sub parse { my $tokenizer = shift; - my @trees; - while ( my $tree = _build_tree( $tokenizer ) ) { - push @trees, $tree; - } + my @trees = _build_tree( $tokenizer ); return undef unless @trees;