On Sat, 11 Feb 2017 03:29:18 -0800, moritz wrote: > sub f($x) { > sub { > if True { > say &?ROUTINE.name > } > } > }.(42)() > > This prints f on Rakudo 2017.01-170-gc0a907f built on MoarVM version > 2017.01-31-g20dfa6b > > &?ROUTINE should refer to the inner, anonymous subroutine here, not to > &f. The same bug happens if the inner subroutine is named, but not if > the "if"-block is absent. > >
Seems an optimizer bug. Goes away if you switch it off: $ perl6 --optimize=3 -e 'sub f($x) { sub y { if True { say &?ROUTINE.name } } }.(42)()' f $ perl6 --optimize=off -e 'sub f($x) { sub y { if True { say &?ROUTINE.name } } }.(42)()' y