# New Ticket Created by Christian Bartolomaeus
# Please include the string: [perl #132673]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=132673 >
After a recent change to roast [1] there are some new failing tests on
the JVM backend similiar to this one:
$ ./perl6-j -Ilib -e 'use Test; is({"a" => 1}.keyof, Str(Any))'
not ok 1 -
# Failed test at -e line 1
# expected: (?(?))
# got: (?(?))
If I'm not mistaken, the underlying problem is, that information about
a parametric type is not available once something like Str(Any)
(Perl6::Metamodel::CoercionHOW) is put into a container.
$ ./perl6-j -e 'use nqp; my $bar = Str(Any); say
nqp::isnull(nqp::typeparameterized($bar)); say $bar.^name; say
nqp::isnull(nqp::typeparameterized(nqp::decont($bar))); say
nqp::decont($bar).^name'
1
?(?)
0
Str(Any)
This does not happen on MoarVM:
$ ./perl6-m -e 'use nqp; my $bar = Str(Any); say
nqp::isnull(nqp::typeparameterized($bar)); say $bar.^name; say
nqp::isnull(nqp::typeparameterized(nqp::decont($bar))); say
nqp::decont($bar).^name'
0
Str(Any)
0
Str(Any)
I'm not sure if this should to be fixed in JVM specific code (nqp) or
at a higher level (using nqp::decont in Rakudo). Currently we don't
use any nqp::decont in src/Perl6/Metamodel/CoercionHOW.nqp and
friends.
[1] https://github.com/perl6/roast/commit/7145799cce