Author: jonathan
Date: Wed Aug 20 13:15:13 2008
New Revision: 30394

Modified:
   branches/lazyrakudo/languages/perl6/src/classes/Array.pir
   branches/lazyrakudo/languages/perl6/src/classes/List.pir
   branches/lazyrakudo/languages/perl6/src/classes/Range.pir
   branches/lazyrakudo/languages/perl6/src/classes/Str.pir

Log:
[rakudo] Get the lazy lists implementation to now pass all of the sanity tests, 
with a variety of small fixes.

Modified: branches/lazyrakudo/languages/perl6/src/classes/Array.pir
==============================================================================
--- branches/lazyrakudo/languages/perl6/src/classes/Array.pir   (original)
+++ branches/lazyrakudo/languages/perl6/src/classes/Array.pir   Wed Aug 20 
13:15:13 2008
@@ -238,8 +238,54 @@
 .end
 
 
+=item pop()
+
+Remove the last item from the array and return it.
+
+=cut
+
+.sub 'pop' :method :multi(Perl6Array)
+    # Need to have the array fully evaluated first.
+    $I0 = self.'elems'()
+    if $I0 == 0 goto empty
+    dec $I0
+    self.'!evaluate_upto'($I0)
+
+    # Then pop from end of evaluated list - we should be fully evaluated now.
+    .local pmc evaluated, x
+    evaluated = getattribute self, '@!evaluated'
+    x = pop evaluated
+    goto done
+  empty:
+    x = new 'Failure'
+  done:
+    .return (x)
+.end
+
+.sub '' :vtable('pop_pmc')
+    $P0 = self.'pop'()
+    .return ($P0)
+.end
+
+.sub '' :vtable('pop_string')
+    $S0 = self.'pop'()
+    .return ($S0)
+.end
+
+.sub '' :vtable('pop_integer')
+    $I0 = self.'pop'()
+    .return ($I0)
+.end
+
+.sub '' :vtable('pop_float')
+    $N0 = self.'pop'()
+    .return ($N0)
+.end
+
+
 ############### Below here still to review after lazy changes. ###############
 
+
 =item delete(indices :slurpy)
 
 Delete the elements specified by C<indices> from the array
@@ -301,24 +347,6 @@
 .end
 
 
-=item pop()
-
-Remove the last item from the array and return it.
-
-=cut
-
-.sub 'pop' :method :multi(Perl6Array)
-    .local pmc x
-    unless self goto empty
-    x = pop self
-    goto done
-  empty:
-    x = new 'Failure'
-  done:
-    .return (x)
-.end
-
-
 =item values()
 
 Return the values of the Array as a List.

Modified: branches/lazyrakudo/languages/perl6/src/classes/List.pir
==============================================================================
--- branches/lazyrakudo/languages/perl6/src/classes/List.pir    (original)
+++ branches/lazyrakudo/languages/perl6/src/classes/List.pir    Wed Aug 20 
13:15:13 2008
@@ -352,7 +352,7 @@
     goto loop
 
   iter_no_values:
-    try = unshift unevaluated
+    try = shift unevaluated
     goto loop
   loop_end:
 .end
@@ -435,6 +435,20 @@
 .end
 
 
+=item clone()
+
+Clones the ResizablePMCArray will all its elements. Actually returns it as
+an Array.
+
+=cut
+
+.sub 'clone' :method
+    $P0 = new 'Perl6Array'
+    setattribute $P0, '@!unevaluated', self
+    .return ($P0)
+.end
+
+
 =item !flatten()
 
 Flatten the invocant, as in list context.  This doesn't make the list eager,

Modified: branches/lazyrakudo/languages/perl6/src/classes/Range.pir
==============================================================================
--- branches/lazyrakudo/languages/perl6/src/classes/Range.pir   (original)
+++ branches/lazyrakudo/languages/perl6/src/classes/Range.pir   Wed Aug 20 
13:15:13 2008
@@ -208,7 +208,7 @@
 
 =cut
 
-.sub 'shift' :method :vtable('shift_pmc')
+.sub 'shift' :method
     .local pmc from, fromexc, value
     from = getattribute self, '$!from'
     fromexc = getattribute self, '$!from_exclusive'
@@ -223,6 +223,26 @@
     .return (value)
 .end
 
+.sub '' :vtable('shift_pmc')
+    $P0 = self.'shift'()
+    .return ($P0)
+.end
+
+.sub '' :vtable('shift_string')
+    $S0 = self.'shift'()
+    .return ($S0)
+.end
+
+.sub '' :vtable('shift_integer')
+    $I0 = self.'shift'()
+    .return ($I0)
+.end
+
+.sub '' :vtable('shift_float')
+    $N0 = self.'shift'()
+    .return ($N0)
+.end
+
 
 =item true()
 

Modified: branches/lazyrakudo/languages/perl6/src/classes/Str.pir
==============================================================================
--- branches/lazyrakudo/languages/perl6/src/classes/Str.pir     (original)
+++ branches/lazyrakudo/languages/perl6/src/classes/Str.pir     Wed Aug 20 
13:15:13 2008
@@ -55,7 +55,7 @@
     .local int len
     .local int i
 
-    retv = new 'List'
+    retv = new 'Perl6Array'
 
     objst = self
     split pieces, delim, objst

Reply via email to