develooper Front page | perl.cvs.parrot | Postings from December 2008

[svn:parrot] r33495 - trunk/languages/perl6/src/parser

From:
jonathan
Date:
December 4, 2008 15:57
Subject:
[svn:parrot] r33495 - trunk/languages/perl6/src/parser
Message ID:
20081204235742.3FED2CB9AF@x12.develooper.com
Author: jonathan
Date: Thu Dec  4 15:57:41 2008
New Revision: 33495

Modified:
   trunk/languages/perl6/src/parser/actions.pm

Log:
[rakudo] When we see a proto routine, mark it :multi() so it ends up in the Perl6MultiSub and set a proto property on it.

Modified: trunk/languages/perl6/src/parser/actions.pm
==============================================================================
--- trunk/languages/perl6/src/parser/actions.pm	(original)
+++ trunk/languages/perl6/src/parser/actions.pm	Thu Dec  4 15:57:41 2008
@@ -479,8 +479,8 @@
         create_sub($/, $past);
     }
 
-    # If it was multi, then emit a :multi and a type list.
-    if $<sym> eq 'multi' {
+    # If it was multi or a proto, then emit a :multi.
+    if $<sym> eq 'multi' || $<sym> eq 'proto' {
         # For now, if this is a multi we need to add code to transform the sub's
         # multi container to a Perl6MultiSub.
         $past.loadinit().push(
@@ -500,6 +500,21 @@
         unless $pirflags { $pirflags := '' }
         $past.pirflags($pirflags  ~ ' :multi()');
     }
+
+    # Protos also need the proto property setting on them.
+    if $<sym> eq 'proto' {
+        $past.loadinit().push(
+            PAST::Op.new(
+                :inline('    setprop %0, "proto", %1'),
+                PAST::Var.new(
+                    :name('block'),
+                    :scope('register')
+                ),
+                1
+            )
+        );
+    }
+
     make $past;
 }
 



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