On Sat, 14 Oct 2017 18:38:47 -0700, alex.jakime...@gmail.com wrote: > Maybe it is worth noting that this is pretty much a regression (even > though an > old one, and caused by a non-optimizer change). > > (2016-08-09) > https://github.com/rakudo/rakudo/commit/328402599c16077e182bb38baf68e435b8bc1082 > > Output before and after: > https://gist.github.com/75b15f93438bd038cf0bec26c43eaa9f > > On 2016-10-03 01:32:09, barto...@gmx.de wrote: > > Playing around I found that the following change made your examples > > work as expected: > > > > diff --git a/src/Perl6/Optimizer.nqp b/src/Perl6/Optimizer.nqp > > index 12398ba..9102b7f 100644 > > --- a/src/Perl6/Optimizer.nqp > > +++ b/src/Perl6/Optimizer.nqp > > @@ -1082,7 +1082,8 @@ class Perl6::Optimizer { > > || nqp::istype($op[0][0], QAST::Stmts) && > > nqp::istype(($c1 := $op[0][0][0]), QAST::Op) > > && > > nqp::existskey(%range_bounds, $c1.name)) && > > - $!symbols.is_from_core($c1.name) { > > + $!symbols.is_from_core($c1.name) && > > + nqp::defined($op[0][1].ann('code_object')) { > > self.optimize_for_range($op, $op[0][1], $c1); > > self.visit_op_children($op); > > return $op; > > > > $ ./perl6 -e '^4 .map: {};' > > Cannot map a Range to a Hash. > > Did you mean to add a stub ({...}) or did you mean to .classify? > > in block <unit> at -e line 1 > > > > $ ./perl6 -e '^4 .map: 42;' > > Cannot resolve caller map(Range: Int); none of these signatures > > match: > > ($: Hash \h, *%_) > > (\SELF: █; :$label, :$item, *%_) > > (HyperIterable:D $: █; :$label, *%_) > > in block <unit> at -e line 1 > > > > $ ./perl6 -e 'sub foo ($) {say "meow"}; ^4 .map: &foo;' > > meow > > meow > > meow > > meow > > > > The original error came from the first two lines in 'method > > optimize_for_ranges' in src/Perl6/Optimizer.nqp. For some reason > > $callee.ann('code_object') did not return a code object as expected. > > > > method optimize_for_range($op, $callee, $c2) { > > my $code := $callee.ann('code_object'); > > my $count := $code.count; > > > > Now, I have no idea whether my change from above makes sense or > > whether the annotation for 'code_object' was wrong in the first > > place.
Thank you for the report. This is now fixed in branch `post-release`. Fix: https://github.com/rakudo/rakudo/commit/f3efe5e6b4a9ee5 Test: https://github.com/rakudo/rakudo/commit/f3efe5e6b4a9ee5