[svn:parrot] r39550 - branches/pmc_pct/compilers/pmcc/src/emitter

bacek at svn.parrot.org bacek at svn.parrot.org
Sun Jun 14 09:10:30 UTC 2009


Author: bacek
Date: Sun Jun 14 09:10:30 2009
New Revision: 39550
URL: https://trac.parrot.org/parrot/changeset/39550

Log:
Change generate_signature method to accept desired name. Implement emitting multis.

Modified:
   branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm

Modified: branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm	Sun Jun 14 09:10:08 2009	(r39549)
+++ branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm	Sun Jun 14 09:10:30 2009	(r39550)
@@ -55,7 +55,7 @@
 
     for %vtables {
         my $entry := %vtables{$_};
-        @res_builder.push(self.generate_signature($entry, "") ~ ";\n");
+        @res_builder.push(self.generate_signature($entry, $entry.name, "") ~ ";\n");
     };
 
     join('', @res_builder);
@@ -343,13 +343,27 @@
     my %vtables := self.vtables;
     my $emitter := PMC::Emitter::C.new;
     my @res;
+
+    # Generate VTABLEs.
     for %vtables {
         my $entry := %vtables{$_};
-        @res.push(self.generate_signature($entry, ""));
+        @res.push(self.generate_signature($entry, $entry.name, ""));
         @res.push($emitter.emit($past, $entry));
         @res.push("\n");
     }
 
+    # Generate MULTIs
+    my %multis := self.past.multis;
+    for %multis.keys {
+        my $multi_name  := $_;
+        my $m           := %multis{ $_ };
+        for $m {
+            @res.push(self.generate_signature($_, $_<full_name>, ""));
+            @res.push($emitter.emit($past, $_));
+            @res.push("\n");
+        }
+    }
+
     join('', @res);
 }
 
@@ -480,10 +494,10 @@
     self.past.vtables;
 }
 
-method generate_signature($entry, $prefix) {
+method generate_signature($entry, $name, $prefix) {
     my @res;
 
-    @res.push('static ' ~ $entry.returns() ~ ' Parrot_' ~ self.name ~ '_' ~ $entry.name);
+    @res.push('static ' ~ $entry.returns() ~ ' Parrot_' ~ self.name ~ '_' ~ $name);
 
     @res.push('(PARROT_INTERP');
     for @($entry<parameters>) {
@@ -548,6 +562,8 @@
     for %constant_strings.keys {
         say("\t" ~ $_ ~ " -> " ~ %constant_strings{$_} );
     }
+
+    "";
 }
 
 method past() {


More information about the parrot-commits mailing list