develooper Front page | perl.cvs.parrot | Postings from January 2009

[svn:parrot] r35085 - in branches/rvar/languages/perl6/src: builtins parser

From:
jonathan
Date:
January 6, 2009 14:41
Subject:
[svn:parrot] r35085 - in branches/rvar/languages/perl6/src: builtins parser
Message ID:
20090106224153.69822CB9F9@x12.develooper.com
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 );



nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About