Author: jonathan
Date: Wed Aug 20 09:13:12 2008
New Revision: 30383
Modified:
branches/lazyrakudo/languages/perl6/src/classes/Iterator.pir
Log:
[rakudo] Fix dumb pre-coffee brain-o's in Perl6Iterator. Now we get through
make, and pass all but one of the 00-parrot sanity tests.
Modified: branches/lazyrakudo/languages/perl6/src/classes/Iterator.pir
==============================================================================
--- branches/lazyrakudo/languages/perl6/src/classes/Iterator.pir
(original)
+++ branches/lazyrakudo/languages/perl6/src/classes/Iterator.pir Wed Aug
20 09:13:12 2008
@@ -15,24 +15,28 @@
.sub 'onload' :anon :load :init
.local pmc p6meta
p6meta = get_hll_global ['Perl6Object'], '$!P6META'
- p6meta.'new_class'('Perl6Iterator', 'name'=>'Iterator', 'parent'=>'Any',
'attributes'=>'@!list $!position')
+ p6meta.'new_class'('Perl6Iterator', 'name'=>'Iterator', 'parent'=>'Any',
'attr'=>'@!list $!position')
.end
+.namespace [ 'Perl6Iterator' ]
.sub 'get_bool' :vtable
- .local pmc list, evaluated, unevaluated
+ .local pmc list, evaluated, unevaluated, position
.local int elems
# Check evaluated part.
list = getattribute self, "@!list"
+ position = getattribute self, "$!position"
evaluated = getattribute list, "@!evaluated"
elems = elements evaluated
- if elems goto true
+ if position < 0 goto unevaluated_check
+ if position < elems goto true
# Check unevaluated part; if we just have iterators, we need to make sure
# they have values (that is, if we have a list of ten exhausted iterators,
# we want to be sure that we return a false value here, since there are no
# more values to be obtained).
+ unevaluated_check:
unevaluated = getattribute list, "@!unevaluated"
elems = elements unevaluated
unless elems goto false