Commit 712396c6 authored by Alessandro Ghedini's avatar Alessandro Ghedini

Imported Upstream version 2013.11

parent 4ef20e8b
This diff is collapsed.
#! perl
# Copyright (C) 2009-2013 The Perl Foundation
use 5.008;
use strict;
use warnings;
use Text::ParseWords;
use Getopt::Long;
use Cwd qw(cwd realpath);
use lib "tools/lib";
use NQP::Configure qw(sorry slurp fill_template_text fill_template_file
system_or_die read_config gen_nqp);
use File::Basename;
my $lang = 'Rakudo';
my $lclang = lc $lang;
my $uclang = uc $lang;
MAIN: {
if (-r "config.default") {
unshift @ARGV, shellwords(slurp('config.default'));
}
my %config;
my $config_status = "${lclang}_config_status";
$config{$config_status} = join(' ', map { "\"$_\""} @ARGV);
my %options;
GetOptions(\%options, 'help!', 'prefix=s', 'with-nqp=s', 'gen-nqp:s',
'make-install!', 'makefile-timing!', 'no-clean!'
) or do {
print_help();
exit(1);
};
# Print help if it's requested
if ($options{'help'}) {
print_help();
exit(0);
}
my $prefix = $options{'prefix'} ||
($^O eq 'MSWin32' ? cwd().'\\install-jvm' : cwd().'/install-jvm');
my $with_nqp = $options{'with-nqp'} ||
($^O eq 'MSWin32' ? 'install-jvm\\bin\\nqp' : 'install-jvm/bin/nqp');
my $gen_nqp = $options{'gen-nqp'};
$prefix = realpath($prefix);
# Save options in config.status
unlink('config.status');
if (open(my $CONFIG_STATUS, '>', 'config.status')) {
print $CONFIG_STATUS
"$^X Configure.pl $config{$config_status} \$*\n";
close($CONFIG_STATUS);
}
# require --with-nqp or --gen-nqp or find executable nqp at default locaton
if (!defined $gen_nqp && !defined $options{'with-nqp'} && ! -x $with_nqp && !-x $with_nqp.".bat") {
die("$with_nqp is not executable; use --with-nqp or use --gen-nqp");
}
# determine the version of NQP we want
my ($nqp_want) = split(' ', slurp('tools/build/NQP_REVISION'));
if (defined $gen_nqp) {
$options{'with-jvm'} = 1;
$options{'prefix'} = $prefix;
$with_nqp = gen_nqp($nqp_want, %options);
}
my @errors;
unless (`$with_nqp --version` =~ /This is nqp .+ JVM/) {
push @errors, "No NQP on JVM found; use --with-nqp to specify or --gen-nqp";
}
my %nqp_config = read_config($with_nqp)
or push @errors, "Unable to read configuration from $with_nqp.";
unless (defined $nqp_config{'jvm::runtime.jars'}) {
push @errors, "jvm::runtime.jars value not available from $with_nqp --show-config.";
}
sorry(@errors) if @errors;
print "Using $with_nqp.\n";
$config{'prefix'} = $prefix;
$config{'nqp'} = $with_nqp;
$config{'nqp_prefix'} = $nqp_config{'jvm::runtime.prefix'};
$config{'nqp_jars'} = $nqp_config{'jvm::runtime.jars'};
$config{'nqp_classpath'} = $nqp_config{'jvm::runtime.classpath'};
$config{'makefile-timing'} = $options{'makefile-timing'};
$config{'stagestats'} = '--stagestats' if $options{'makefile-timing'};
$config{'cpsep'} = $^O eq 'MSWin32' ? ';' : ':';
$config{'slash'} = $^O eq 'MSWin32' ? '\\' : '/';
$config{'runner'} = $^O eq 'MSWin32' ? 'perl6.bat' : 'perl6';
my $make = $config{'make'} = $^O eq 'MSWin32' ? 'nmake' : 'make';
fill_template_file('tools/build/Makefile-JVM.in', 'Makefile', %config);
unless ($options{'no-clean'}) {
no warnings;
print "Cleaning up ...\n";
if (open my $CLEAN, '-|', "$make clean") {
my @slurp = <$CLEAN>;
close($CLEAN);
}
}
if ($options{'make-install'}) {
system_or_die($make);
system_or_die($make, 'install');
print "\n$lang has been built and installed.\n";
}
else {
print "\nYou can now use '$make' to build $lang.\n";
print "After that, '$make test' will run some tests and\n";
print "'$make install' will install $lang.\n";
}
exit 0;
}
# Print some help text.
sub print_help {
print <<"END";
ConfigureJVM.pl - $lang Configure
General Options:
--help Show this text
--prefix=dir Install files in dir
--gen-nqp[=branch] Download and build NQP
--with-nqp=path/to/bin/nqp
NQP JVM to use to build
--makefile-timing Enable timing of individual makefile commands
ConfigureJVM.pl also reads options from 'config.default' in the current directory.
END
return;
}
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 100
# End:
# vim: expandtab shiftwidth=4:
# Rakudo "nom" Branch Low Hanging Fruit
Want to help? Want something that (hopefully) doesn't require deep
guts skillz? Take a task from this list. Delete it from here when
you commit; maybe announce on #perl6 that you're working on it too.
Note - do not just copy stuff from the master setting! Often things
need to be done differently in the "nom" branch, to take advantage of
new possible performance.
## More Smart-matching
See S03-smartmatch tests, especially array-array.t, hash-hash.t and
so forth. The regex ones are probably also good candidates now.
## Nil assignment
my Int $b = 3; $b = Nil;
This diff is collapsed.
......@@ -19,7 +19,7 @@ Rakudo Perl 6
installation instructions. The short version is
$ # recommended: install libicu-dev and libreadline-dev packages
$ perl Configure.pl --gen-parrot
$ perl Configure.pl --gen-parrot --backends=parrot
$ make
$ make spectest # optional
$ make install # IMPORTANT, installs to install/bin/perl6
......@@ -34,7 +34,7 @@ Rakudo Perl 6
will fetch an appropriate revision of nqp, build it, and then build
rakudo on the jvm.
$ perl ConfigureJVM.pl --gen-nqp
$ perl Configure.pl --gen-nqp --backends=jvm
$ make
Note that Rakudo on JVM implements a slightly different set of features
......
*.pbc
*.class
*.moarvm
\ No newline at end of file
New in 2013.11
+ Many concurrency primitives harmonized with new S17, but still pretty fluid
+ Refactored build system that allows building rakudo on both backends in the same place
+ Order::Increase/Decrease are deprecated. Please use Order::Less/More.
+ Leading whitespace is ignored for :sigspace
+ Better null pattern detection in regexes
+ The "gethostname" function implemented
+ Warn when private attributes are a marked rw or readonly
+ "is DEPRECATED" trait now produces report when process finished
+ Parcel.rotate implemented
+ Performance optimization: unfold junctions in 'when' clauses
+ capitalize/.capitalize have been removed, as per docs/deprecations
+ improved run()/shell(), these return Proc::Status-objects now
+ The ... range operator can now be chained: 1,2,3 ... 10,15,20 ... 100
+ various other bug fixes, optimisations and additional tests
New in 2013.10
+ postcircumfix {} and [] are now implemented as multi subs rather than multi methods. This should allow for better optimization in the future.
+ Add support for "is deprecated", making it easy for early adopters to stay current.
+ Add support for "is DEPRECATED", making it easy for early adopters to stay current.
+ Track multiple spec changes for various container classes.
+ Greatly reduce object creation during Regex parsing.
+ Various portability fixes.
......
Rakudo Roadmap
--------------
Last updated: 2013-08-25
Last updated: 2013-10-25
This document serves as a guide to the major goals for Rakudo
development, as things stood in December 2011. They have been
......@@ -28,7 +28,6 @@ remove completed ones, re-prioritize, volunteer for a goal,
rescue yourself from a goal, etc.
Compiler Performance/Portability Improvements (jnthn)
2 ** finish up any remaining s/pir::/nqp::/
3 ** Optimizing multis for `[+] 1..10` and `[<=] 1..10` etc.
Macros (masak)
......@@ -42,8 +41,6 @@ Operators
Regexes
2 ** ~~ inside regexes
2 * Null pattern detection (at parse time)
2 * :sigspace ignores leading whitespace
3 ** <*foo>
3 ** <~~0>, <~~foo>
3 *** explicit backtracking control (::, :::)
......@@ -54,12 +51,11 @@ Built-ins/Data Structures
2 *** packed arrays (jnthn)
2 ***** NFG strings, .codes, .graphs, etc.
2 ** Rat/FatRat/Rational cleanup
2 *** other S02 data types -- KeySet, KeyBag (tadzik)
2 ** sized/shaped arrays (jnthn)
2 *** val() (japhb)
2 ** Correct type smiley support (:U, :D, :T, etc.) (jnthn)
3 *** arrays with custom keys
3 *** complete Buf implementation
3 *** complete Buf implementation (depends on 'is rw' native ints)
3 *** complete LoL and slice context implementation
3 *** Cat and stream matching
......
# Announce: Rakudo Perl 6 compiler, Development Release #70 ("Malmö")
On behalf of the Rakudo development team, I'm happy to announce the
November 2013 release of Rakudo Perl #70 "Malmö". Rakudo is an
implementation of Perl 6 on the Parrot Virtual Machine and the Java Virtual
Machine. The tarball for this release is available from
<http://rakudo.org/downloads/rakudo/>.
Please note: This announcement is not for the Rakudo Star
distribution[^1] --- it's announcing a new release of the compiler
only. For the latest Rakudo Star release, see
<http://rakudo.org/downloads/star/>.
The Rakudo Perl compiler follows a monthly release cycle, with each
release named after a Perl Mongers group. The November 2013 release is
code-named after Malmö, from which this release has been launched.
Some of the changes in this release are outlined below:
+ Many concurrency primitives harmonized with new S17, but still pretty fluid
+ Refactored build system that allows building rakudo on rakudo/JVM in the same place
+ Order::Increase/Decrease are deprecated. Please use Order::Less/More.
+ Leading whitespace is ignored for :sigspace
+ Better null pattern detection in regexes
+ improved run()/shell(), these return Proc::Status-objects now
+ The "gethostname" function implemented
+ Performance optimization: unfold junctions in 'when' clauses
+ various other bug fixes, optimisations and additional tests
These are only some of the changes in this release. For a more
detailed list, see "docs/ChangeLog".
The development team thanks all of our contributors and sponsors for
making Rakudo Perl possible, as well as those people who worked on
Parrot, the Perl 6 test suite and the specification.
The following people contributed to this release:
Moritz Lenz, Tobias Leich, Jonathan Worthington, Timo Paulssen,
Will "Coke" Coleda, Mouq, Brian Gernhardt, Arne Skjærholt, L. Grondin,
Geoffrey Broadwell, Steve Mynott, Andrew Egeler, Elizabeth Mattijsen
If you would like to contribute, see <http://rakudo.org/how-to-help>,
ask on the <perl6-compiler@perl.org> mailing list, or ask on IRC
\#perl6 on freenode.
The next release of Rakudo (#71), is scheduled for December 19, 2013.
A list of the other planned release dates and code names for future
releases is available in the "docs/release_guide.pod" file. A Rakudo
development release occurs soon after each Parrot monthly release is
scheduled to occur. Parrot usually releases the third Tuesday of
each month.
On behalf of the development team, I encourage you to try the new release,
step out of your comfort zone, and get a library card.
[^1]: What's the difference between the Rakudo compiler and the Rakudo
Star distribution?
The Rakudo compiler is a compiler for the Perl 6 language.
Nothing else.
The Rakudo Star distribution is the Rakudo compiler plus a selection
of useful Perl 6 modules, a module installer, the most recent
incarnation of the "Using Perl 6" book, and other software that can
be used with the Rakudo compiler to enhance its utility. Rakudo Star
is meant for early adopters who wish to explore what's possible with
Rakudo Perl 6 and provide feedback on what works, what doesn't, and
what else they would like to see included in the distribution.
This diff is collapsed.
......@@ -25,11 +25,11 @@ A main program drives parsing, code generation and runtime execution
=item 3.
A grammar parses user programs (F<Perl6/Grammar.pm>)
A grammar parses user programs (F<Perl6/Grammar.nqp>)
=item 4.
Action methods build a Parrot Abstract Syntax Tree (F<Perl6/Actions.pm>)
Action methods build a Parrot Abstract Syntax Tree (F<Perl6/Actions.nqp>)
=item 5.
......@@ -158,7 +158,7 @@ exceptions for syntax errors.
=head2 4. Actions
The F<Perl6/Actions.pm> file defines the code that the compiler
The F<Perl6/Actions.nqp> file defines the code that the compiler
generates when it matches each token or rule. The output is a tree
hierarchy of objects representing language syntax elements, such as a
statement. The tree is called a Parrot Abstract Syntax Tree (PAST).
......
Deprecations in 2013.11
Order::Increase and Order::Decrease are now called Order::Less and
Order::More. Using "Increase" or "Decrease" will now generate
"is DEPRECATED" warnings at the end of execution.
Deprecations in 2012.12
'for'-loops will be lazy (just like map), and only be automatically
......
......@@ -15,7 +15,6 @@ end of this document.
Releases are typically on the third Thursday of each month.
2013-11-21 Rakudo #70 lizmat
2013-12-19 Rakudo #71
2014-01-23 Rakudo #72
2014-02-20 Rakudo #73
......@@ -89,8 +88,8 @@ commit the new version:
But probably there won't be any new leap seconds, in which case the file
will be unchanged.
B<Note>: this program requires the perl modules L<Time::y2038> and
L<LWP::Simple> be installed.
B<Note>: this program requires the perl modules L<Time::y2038>,
L<LWP::Simple> and L<File::Slurp> to be installed.
=item 3.
......@@ -295,6 +294,7 @@ You're done! Celebrate with the appropriate amount of fun.
2013-08-22 Rakudo #67 "Bicycle" (moritz)
2013-09-19 Rakudo #68 "Shanghai" (masak)
2013-10-17 Rakudo #69 "Roederbergweg" (Coke)
2013-11-21 Rakudo #70 "Malmö" (lizmat)
=head1 COPYRIGHT
......
This diff is collapsed.
This diff is collapsed.
......@@ -142,7 +142,7 @@ BEGIN {
:$positional_delegate = 0, :$associative_delegate = 0, *%other) {
my $attr := nqp::create($self);
nqp::bindattr_s($attr, Attribute, '$!name', $name);
nqp::bindattr($attr, Attribute, '$!type', $type);
nqp::bindattr($attr, Attribute, '$!type', nqp::decont($type));
nqp::bindattr_i($attr, Attribute, '$!has_accessor', $has_accessor);
nqp::bindattr($attr, Attribute, '$!package', $package);
if nqp::existskey(%other, 'container_descriptor') {
......
......@@ -12,6 +12,9 @@ role Perl6::Metamodel::BUILDPLAN {
# 2 class name attr_name = try to find initialization value, or set nqp::list()
# 3 class name attr_name = try to find initialization value, or set nqp::hash()
# 4 class attr_name code = call default value closure if needed
# 5 class name attr_name = set a native int attribute
# 6 class name attr_name = set a native num attribute
# 7 class name attr_name = set a native str attribute
method create_BUILDPLAN($obj) {
# First, we'll create the build plan for just this class.
my @plan;
......@@ -31,7 +34,13 @@ role Perl6::Metamodel::BUILDPLAN {
if $_.has_accessor {
my $attr_name := $_.name;
my $name := nqp::substr($attr_name, 2);
@plan[+@plan] := [1, $obj, $name, $attr_name];
my $typespec := nqp::objprimspec($_.type);
if $typespec == 1 || $typespec == 2 || $typespec == 3 {
@plan[+@plan] := [nqp::add_i(4, $typespec),
$obj, $name, $attr_name];
} else {
@plan[+@plan] := [1, $obj, $name, $attr_name];
}
}
}
}
......
......@@ -106,7 +106,7 @@ class Perl6::Metamodel::ParametricRoleGroupHOW
if $decont =:= $obj.WHAT {
return 1;
}
for self.prentending_to_be() {
for self.pretending_to_be() {
if $decont =:= nqp::decont($_) {
return 1;
}
......
......@@ -117,7 +117,7 @@ class Perl6::Metamodel::ParametricRoleHOW
if $!in_group && $decont =:= $!group {
return 1;
}
for self.prentending_to_be() {
for self.pretending_to_be() {
if $decont =:= nqp::decont($_) {
return 1;
}
......
......@@ -5,7 +5,7 @@ role Perl6::Metamodel::TypePretense {
@pretending := @types;
}
method prentending_to_be() {
method pretending_to_be() {
@pretending
}
......@@ -13,7 +13,7 @@ role Perl6::Metamodel::TypePretense {
if $obj =:= $checkee {
return 1;
}
for self.prentending_to_be() {
for self.pretending_to_be() {
if $checkee =:= $_ {
return 1;
}
......
......@@ -284,9 +284,18 @@ class Perl6::Optimizer {
}
# we may be able to unfold a junction at compile time.
if $*LEVEL >= 2 && is_outer_foldable() && nqp::istype($op[0], QAST::Op) && $op[0].op eq "chain" {
my $exp-side := self.can_chain_junction_be_warped($op[0]);
if $exp-side != -1 && chain_handles_Any($op[0].name) == 1 {
if $*LEVEL >= 2 && is_outer_foldable() && nqp::istype($op[0], QAST::Op) {
my $proceed := 0;
my $exp-side;
if $op[0].op eq "chain" {
$exp-side := self.can_chain_junction_be_warped($op[0]);
$proceed := $exp-side != -1 && chain_handles_Any($op[0].name) == 1
} elsif $op[0].op eq 'callmethod' && $op[0].name eq 'ACCEPTS' {
$exp-side := self.can_chain_junction_be_warped($op[0]);
# we should only ever find the 0nd child (the invocant) to be a junction anyway.
$proceed := $exp-side == 0;
}
if $proceed {
# TODO chain_handles_Any may get more cleverness to check only the parameters that actually have
# a junction passed to them, so that in some cases the unfolding may still happen.
my str $juncop := $op[0][$exp-side].name eq '&infix:<&>' ?? 'if' !! 'unless';
......@@ -655,10 +664,10 @@ class Perl6::Optimizer {
}
self.add_deadly($op,
($protoguilt ?? "Calling proto of '" !! "Calling '") ~
$obj.name ~ "' will never work with " ~
(+@arg_names == 0 ??
"no arguments" !!
"argument types (" ~ join(', ', @arg_names) ~ ")"),
$obj.name ~ "' " ~
(+@arg_names == 0
?? "requires arguments"
!! "will never work with argument types (" ~ join(', ', @arg_names) ~ ")"),
$obj.is_dispatcher && !$protoguilt ??
multi_sig_list($obj) !!
[" Expected: " ~ try $obj.signature.perl ]);
......
......@@ -331,7 +331,7 @@ class Perl6::World is HLL::World {
method load_module($/, $module_name, %opts, $cur_GLOBALish) {
# Immediate loading.
my $line := HLL::Compiler.lineof($/.orig, $/.from, :cache(1));
my $module := Perl6::ModuleLoader.load_module($module_name, %opts,
my $module := nqp::gethllsym('perl6', 'ModuleLoader').load_module($module_name, %opts,
$cur_GLOBALish, :$line);
# During deserialization, ensure that we get this module loaded.
......@@ -1545,7 +1545,7 @@ class Perl6::World is HLL::World {
# we find something without one.
my @pos_args;
my %named_args;
for @($arglist[0].ast) {
for @($arglist) {
my $val;
if $_.has_compile_time_value {
$val := $_.compile_time_value;
......@@ -1972,10 +1972,10 @@ class Perl6::World is HLL::World {
}
for $name<morename> {
if $_<identifier> {
@components.push(~$_<identifier>[0]);
@components.push(~$_<identifier>);
}
elsif $_<EXPR> {
my $EXPR := $_<EXPR>[0].ast;
my $EXPR := $_<EXPR>.ast;
@components.push($EXPR);
}
else {
......
......@@ -25,7 +25,9 @@ my class Backtrace::Frame {
method is-hidden(Backtrace::Frame:D:) { $!code.?is_hidden_from_backtrace }
method is-routine(Backtrace::Frame:D:) { $!code ~~ Routine }
method is-setting(Backtrace::Frame:D:) { $!file eq 'src/gen/CORE.setting' }
method is-setting(Backtrace::Frame:D:) {
$!file.chars > 12 && $!file.substr(*-12) eq 'CORE.setting'
}
}
my class Backtrace is List {
......@@ -49,6 +51,7 @@ my class Backtrace is List {
multi method new(Parcel $bt, Int $offset = 0) {
my $new = self.bless();
for $offset .. $bt.elems - 1 {
next unless defined $bt[$_]<sub>;
my Mu $sub := nqp::getattr(nqp::decont($bt[$_]<sub>), ForeignCode, '$!do');
next if nqp::isnull($sub);
my $code;
......
......@@ -79,9 +79,15 @@ my role Baggy does QuantHash {
%!elems{ @grab.map({.WHICH}).grep: { %!elems{$_}.value == 0 } }:delete;
@grab;
}
method grabpairs($count = 1) {
(%!elems{ %!elems.keys.pick($count) }:delete).list;
}
method pick ($count = 1) {
ROLLPICKGRAB(self, $count, %!elems.values.map: { (.key => .value) });
}
method pickpairs ($count = 1) {
(%!elems{ %!elems.keys.pick($count) }).list;
}
method roll ($count = 1) {
ROLLPICKGRAB(self, $count, %!elems.values, :keep);
}
......@@ -90,7 +96,7 @@ my role Baggy does QuantHash {
my $total = $self.total;
my $todo = $count ~~ Num
?? $total min $count
!! ($count ~~ Whatever ?? $total !! $count);
!! ($count ~~ Whatever ?? ( $keep ?? $Inf !! $total ) !! $count);
map {
my $rand = $total.rand.Int;
......@@ -110,10 +116,6 @@ my role Baggy does QuantHash {
}, 1 .. $todo;
}
method grabpairs($count = 1) {
(%!elems{ %!elems.keys.pick($count) }:delete).list;
}
proto method classify-list(|) { * }
multi method classify-list( &test, *@list ) {
fail 'Cannot .classify an infinite list' if @list.infinite;
......
......@@ -109,10 +109,6 @@ my class Cool { # declared in BOOTSTRAP
self.tc;
}
method capitalize() { # is DEPRECATED doesn't work in settings
DEPRECATED("'tclc'");
self.Stringy.tclc;
}
method wordcase() { self.Str.wordcase }
method chomp() {
......@@ -233,15 +229,6 @@ sub ucfirst(Cool $s) { # is DEPRECATED doesn't work in settings
DEPRECATED("'tc'");
$s.tc;
}
proto sub capitalize($) { * }
multi sub capitalize(Str:D $x) { # is DEPRECATED doesn't work in settings
DEPRECATED("'tclc'");
$x.tclc;
}
multi sub capitalize(Cool $x) { # is DEPRECATED doesn't work in settings
DEPRECATED("'tclc'");
$x.Stringy.tclc;
}
sub chop(Cool $s) { $s.chop }
sub chomp(Cool $s) { $s.chomp }
......
......@@ -47,7 +47,7 @@ sub DEPRECATED ($alternative) {
my $what = Deprecation.new(
file => $deprecated.file,
type => $deprecated.subtype.tc,
package => $deprecated.package.^name,
package => $deprecated.package.HOW.name($deprecated),
name => $deprecated.subname,
:$alternative,
);
......
......@@ -36,12 +36,8 @@ my class Failure {
}
);
method sink() { $!exception.throw unless $!handled }
# class Any has a fallback method, so we need to redefine it here
method postcircumfix:<{ }>(|c) { $!exception.throw }
}
my &fail := -> *@msg {
my $value = @msg == 1 ?? @msg[0] !! @msg.join('');
die $value if $*FATAL;
......
......@@ -113,7 +113,7 @@ my class IO::Handle does IO::FileTestable {
method close() {
# TODO:b catch errors
nqp::closefh($!PIO) if nqp::istrue($!PIO);
nqp::closefh($!PIO) if nqp::defined($!PIO);
$!PIO := Mu;
Bool::True;
}
......
......@@ -535,7 +535,7 @@ my class List does Positional { # declared in BOOTSTRAP
}
my sub combinations(Int $n, Int $k) {
return [] if $k == 0;
return [] if $k <= 0;
return () if $k > $n;
gather {
take [0, (1..^$n)[@$_]] for combinations($n-1, $k-1);
......@@ -547,7 +547,10 @@ my class List does Positional { # declared in BOOTSTRAP
gather take self[@$_] for combinations self.elems, $of
}
multi method combinations( Range $of = 0 .. * ) {
X::NYI.new.throw;
gather for @$of {
last if $_ > self.elems;
take self.combinations($_);
}
}
my sub permutations(Int $n) {
......
......@@ -8,7 +8,7 @@ my class MapIter is Iterator {
method new($list, $block, Mu $flattens = Bool::True) {
my $new := nqp::create(self);
$new.BUILD(nqp::p6listiter(nqp::qlist(nqp::decont($list)), $new),
$new.BUILD(nqp::p6listiter(nqp::list(nqp::decont($list)), $new),
$block, $flattens, True);
$new;
}
......@@ -32,7 +32,7 @@ my class MapIter is Iterator {
my Mu $rpa := nqp::list();