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;
 

Reply via email to