[svn:parrot] r39390 - in branches/pmc_pct/compilers/pmcc: src/parser t

bacek at svn.parrot.org bacek at svn.parrot.org
Thu Jun 4 13:00:53 UTC 2009


Author: bacek
Date: Thu Jun  4 13:00:52 2009
New Revision: 39390
URL: https://trac.parrot.org/parrot/changeset/39390

Log:
Implement MULTIs PASTing

Modified:
   branches/pmc_pct/compilers/pmcc/src/parser/actions.pm
   branches/pmc_pct/compilers/pmcc/t/08-multi.t

Modified: branches/pmc_pct/compilers/pmcc/src/parser/actions.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/parser/actions.pm	Thu Jun  4 13:00:25 2009	(r39389)
+++ branches/pmc_pct/compilers/pmcc/src/parser/actions.pm	Thu Jun  4 13:00:52 2009	(r39390)
@@ -92,6 +92,12 @@
     elsif $key eq 'method' {
         $?PMC.add_method($m.name, $m);
     }
+    elsif $key eq 'multi' {
+        $?PMC.add_multi($m.name, $m);
+    }
+    else {
+        $/.panic("Unsupported body part " ~ $m);
+    }
 }
 
 method class_init($/) {
@@ -135,7 +141,16 @@
 
 method multi($/) {
     #say('MULTI ' ~$<identifier>);
-    my $past := PAST::Block.new( :blocktype('declaration'), :node($/) );
+    my $past := PAST::Block.new(
+        :name(~$<c_signature><identifier>),
+        :blocktype('method'),
+        :returns(~$<c_signature><c_type>),
+        :node($/),
+
+        $<c_body>.ast
+    );
+    $past<parameters> := $<c_signature><c_arguments>.ast;
+    make $past;
     make $past;
 }
 

Modified: branches/pmc_pct/compilers/pmcc/t/08-multi.t
==============================================================================
--- branches/pmc_pct/compilers/pmcc/t/08-multi.t	Thu Jun  4 13:00:25 2009	(r39389)
+++ branches/pmc_pct/compilers/pmcc/t/08-multi.t	Thu Jun  4 13:00:52 2009	(r39390)
@@ -17,7 +17,6 @@
     (emitter, capture) = get_emitter_and_capture(filename, content, 'past')
     ok("MULTI functions parsed")
 
-    
 .end
 
 # Don't forget to update plan!


More information about the parrot-commits mailing list