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 );

Reply via email to