On Sat, 14 Jan 2017 03:06:52 -0800, elizabeth wrote: > Hopefully fixed in 00c3551c86 . Cannot check because building JVM > backend fails on MacOS.
As discussed on #perl6-dev [1] this didn't fix the issue, unfortunately. I think, I've found the underlying reason for the breakage. This is a golf of the error (the following evaluations are run on commit 502fc77a68): $ ./perl6-j --version This is Rakudo version 2016.12-320-g502fc77 built on JVM implementing Perl 6.c. $ ./perl6-j -e 'say Rakudo::Internals.ListsFromSeq( (2,3), combinations(2,0))' java.lang.RuntimeException: No such attribute '$!reified' for this object in method pull-one at gen/jvm/CORE.setting line 2931 in method push-exactly at gen/jvm/CORE.setting line 2734 in method push-at-least at gen/jvm/CORE.setting line 2753 in method reify-at-least at gen/jvm/CORE.setting line 18753 in method pull-one at gen/jvm/CORE.setting line 19246 in method pull-one at gen/jvm/CORE.setting line 6730 in method join at gen/jvm/CORE.setting line 17261 in method gist at gen/jvm/CORE.setting line 19448 in method gist at gen/jvm/CORE.setting line 17240 in sub say at gen/jvm/CORE.setting line 36238 in block <unit> at -e line 1 Now 'combinations(2,0)' is nothing else than 'Seq.new(Rakudo::Iterator.Combinations(2,0,0))' At first glance the following looks ok: $ ./perl6-j -e 'dd combinations(2,0)' # same output as on perl6-m ((),).Seq But this looks wrong: $ ./perl6-j -e 'dd combinations(2,0)[0..1]' ((), Mu) Compare to perl6-m: $ ./perl6-m -e 'dd combinations(2,0)[0..1]' ((), Nil) And calling 'Seq.new(Rakudo::Iterator.Combinations(2,0,0))' reveals the problem: $ ./perl6-j -e 'say Seq.new(Rakudo::Iterator.Combinations(2,0,0))' (() (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) ...) Under the hood Rakudo::Iterator.OneValue is called like so: $ ./perl6-j -e 'say Seq.new(Rakudo::Iterator.OneValue(List.new))' (() (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) (Mu) ...) And within Rakudo::Iterator.OneValue we execute something like this (same bug as in https://rt.perl.org/Ticket/Display.html?id=130532): $ ./perl6-j -e 'use nqp; class A { has Mu $!foo; method bar () { $!foo := nqp::null; say nqp::isnull($!foo) ?? "null" !! $!foo } }.new.bar' (Mu) So, as far as I understand Rakudo::Iterator.OneValue does not work correctly on rakudo-j, and that surfaces at different points due to lizmat's refactoring. [1] https://irclog.perlgeek.de/perl6-dev/2017-01-14#i_13920333