On Wed, May 07, 2008 at 02:12:00AM -0700, Stephen Weeks wrote:
> Rakudo currently passes positional arguments into named parameters of
> functions. This is in violation of S06:748.
>
> sub a (:$a) { say $a }
> a(1);
There's a somewhat significant mismatch between Perl 6's handling of
arguments and Parrot's handling of them; at the moment Rakudo
is following the Parrot conventions.
My guess at this point is that unless/until Parrot updates its
calling conventions, Rakudo will at some point generate most of
its subs as
.sub 'a'
.param pmc positional :slurpy
.param pmc named :slurpy :named
...
and then generate code to bind positional/named arguments to
local lexicals according to P6 conventions.
> Possibly related, this also does the wrong thing:
>
> multi sub t ($a) { say 'one positional' }
> multi sub t ($:a) { say 'one named' }
> t(1);
>
> Prints: "one named".
I suspect Parrot's MMD here, and since Parrot MMD is due for an
overhaul (pdd27) we'll probably accept this for a while.
Thanks!
Pm