# New Ticket Created by  Vasily Chekalkin 
# Please include the string:  [perl #55400]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=55400 >


Hello.

This is fix for reusing same range many times.

my $a = (1..5); say $a.from; my @b = $a; say 'One '[EMAIL PROTECTED]; say 
$a.from; @b 
= $a; say 'Two '[EMAIL PROTECTED];

Produces:
One 1 2 3 4 5
Two

Patch is partially useful even for (future) lazy lists.

-- 
Bacek.
diff --git a/languages/perl6/src/classes/Range.pir 
b/languages/perl6/src/classes/Range.pir
index ecd24ca..f0670ee 100644
--- a/languages/perl6/src/classes/Range.pir
+++ b/languages/perl6/src/classes/Range.pir
@@ -53,11 +53,12 @@ we need to not do that.
 =cut
 
 .sub 'list' :method
-    .local pmc res, cur_val
+    .local pmc res, cur_val, it
+    it = iter self
     res = new 'List'
   it_loop:
-    unless self goto it_loop_end
-    cur_val = shift self
+    unless it goto it_loop_end
+    cur_val = shift it
     push res, cur_val
     goto it_loop
   it_loop_end:
@@ -114,12 +115,18 @@ Returns a Perl code representation of the range.
 
 =item get_iter (vtable)
 
-Just returns this Range itself, since a Range is an iterator.
+Clone this Range itself, since a Range is an iterator.
 
 =cut
 
 .sub get_iter :method :vtable
-    .return (self)
+    .local pmc from, to, retv
+    $P0 = self.'from'()
+    from = clone $P0
+    $P0 = self.'to'()
+    to = clone $P0
+    retv = 'infix:..'(from, to)
+    .return(retv)
 .end
 
 

Reply via email to