Author: jonathan
Date: Wed Jan 14 08:08:32 2009
New Revision: 35530
Modified:
trunk/languages/perl6/src/builtins/guts.pir
trunk/languages/perl6/src/parser/actions.pm
trunk/languages/perl6/t/spectest.data
Log:
[rakudo] class C does R[param1, ...] { ... } now works insofar as it chooses the correct role.
Modified: trunk/languages/perl6/src/builtins/guts.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/guts.pir (original)
+++ trunk/languages/perl6/src/builtins/guts.pir Wed Jan 14 08:08:32 2009
@@ -518,6 +518,8 @@
.param pmc metaclass
.param string type
.param string name
+ .param pmc pos_args :slurpy
+ .param pmc named_args :slurpy :named
if type == 'trait_auxiliary:is' goto is
if type == 'trait_auxiliary:does' goto does
@@ -542,8 +544,7 @@
$P0 = get_hll_global $P0, $S0
## select the correct role based upon any parameters
- ## XXX need to pass along params; for now, none.
- $P0 = $P0.'!select'()
+ $P0 = $P0.'!select'(pos_args :flat, named_args :flat :named)
## add it to the class.
metaclass.'add_role'($P0)
Modified: trunk/languages/perl6/src/parser/actions.pm
==============================================================================
--- trunk/languages/perl6/src/parser/actions.pm (original)
+++ trunk/languages/perl6/src/parser/actions.pm Wed Jan 14 08:08:32 2009
@@ -979,6 +979,17 @@
}
elsif $sym eq 'does' {
$trait.push( ~$<name> );
+ if $<EXPR> {
+ for @(build_call($( $<EXPR>[0] ))) {
+ if $_.returns() eq 'Pair' {
+ $_[1].named($_[0]);
+ $trait.push($_[0]);
+ }
+ else {
+ $trait.push($_);
+ }
+ }
+ }
}
make $trait;
}
Modified: trunk/languages/perl6/t/spectest.data
==============================================================================
--- trunk/languages/perl6/t/spectest.data (original)
+++ trunk/languages/perl6/t/spectest.data Wed Jan 14 08:08:32 2009
@@ -222,6 +222,7 @@
S12-role/composition.t
S12-role/mixin.t
S12-role/namespaced.t
+S12-role/parameterized-basic.t
S12-subset/multi-dispatch.t
S12-subset/subtypes.t
S16-filehandles/io.t