Author: jonathan
Date: Tue Jan 6 14:41:52 2009
New Revision: 35085
Modified:
branches/rvar/languages/perl6/src/builtins/guts.pir
branches/rvar/languages/perl6/src/parser/actions.pm
Log:
[rakudo] Restore handling of trait_auxiliary:does.
Modified: branches/rvar/languages/perl6/src/builtins/guts.pir
==============================================================================
--- branches/rvar/languages/perl6/src/builtins/guts.pir (original)
+++ branches/rvar/languages/perl6/src/builtins/guts.pir Tue Jan 6 14:41:52 2009
@@ -422,6 +422,11 @@
.param string type
.param string name
+ if type == 'trait_auxiliary:is' goto is
+ if type == 'trait_auxiliary:does' goto does
+ 'die'("Unknown trait auxiliary ", type)
+
+ is:
## get the (parrot)class object associated with name
$P0 = compreg 'Perl6'
$P0 = $P0.'parse_name'(name)
@@ -430,6 +435,18 @@
## add it as parent to metaclass
metaclass.'add_parent'($P0)
+ .return ()
+
+ does:
+ ## get the role to be composed
+ $P0 = compreg 'Perl6'
+ $P0 = $P0.'parse_name'(name)
+ $S0 = pop $P0
+ $P0 = get_hll_global $P0, $S0
+ say $P0
+
+ ## add it to the class.
+ metaclass.'add_role'($P0)
.end
Modified: branches/rvar/languages/perl6/src/parser/actions.pm
==============================================================================
--- branches/rvar/languages/perl6/src/parser/actions.pm (original)
+++ branches/rvar/languages/perl6/src/parser/actions.pm Tue Jan 6 14:41:52 2009
@@ -897,7 +897,7 @@
method trait_auxiliary($/) {
my $sym := ~$<sym>;
my $trait;
- if $sym eq 'is' {
+ if $sym eq 'is' || $sym eq 'does' {
$trait := ~$<name>;
}
make PAST::Op.new( :name('infix:,'), 'trait_auxiliary:' ~ $sym, $trait );