[svn:parrot] r39500 - in branches/pmc_pct/compilers/pmcc/src: . emitter emitter/pmc

cotto at svn.parrot.org cotto at svn.parrot.org
Wed Jun 10 22:51:05 UTC 2009


Author: cotto
Date: Wed Jun 10 22:51:05 2009
New Revision: 39500
URL: https://trac.parrot.org/parrot/changeset/39500

Log:
[pmcc] start using vtdumper's vtable dump for code generation

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

Modified: branches/pmc_pct/compilers/pmcc/src/emitter.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/emitter.pm	Wed Jun 10 22:42:20 2009	(r39499)
+++ branches/pmc_pct/compilers/pmcc/src/emitter.pm	Wed Jun 10 22:51:05 2009	(r39500)
@@ -13,7 +13,7 @@
     my $filename := self.filename();
 
     # Get emitter for (specific) PMC.
-    my $pmc_emitter := get_pmc_emitter($name, $past);
+    my $pmc_emitter := get_pmc_emitter($name, $past, self.vtable_info);
 
     $res :=
             # Generate header.
@@ -34,7 +34,7 @@
     my $filename := self.filename();
 
     # Get emitter for (specific) PMC.
-    my $pmc_emitter := get_pmc_emitter($name, $past);
+    my $pmc_emitter := get_pmc_emitter($name, $past, self.vtable_info);
 
     $res :=
             # Generate header.
@@ -55,7 +55,7 @@
     my $filename := self.filename();
 
     # Get emitter for (specific) PMC.
-    my $pmc_emitter := get_pmc_emitter($name, $past);
+    my $pmc_emitter := get_pmc_emitter($name, $past, self.vtable_info);
 
     $pmc_emitter.generate_dump();
 }
@@ -81,22 +81,25 @@
 
 # Get (specific) PMC emitter
 # Try to create specific emitter. In case of failure create generic one.
-sub get_pmc_emitter($name, $past) {
+sub get_pmc_emitter($name, $past, $vtable_info) {
 PIR q<
     find_lex $P0, '$name'
     find_lex $P1, '$past'
+    find_lex $P2, '$vtable_info'
     $S0 = $P0
 
     .local pmc ctor
     ctor = get_hll_global ['PMC';'Emitter';'PMC'], $S0
     push_eh not_found
     %r = ctor.'new'($P1)
+    %r.'set_vtable_info'($P2)
     goto done
 
   not_found:
     pop_eh
     ctor = get_hll_global ['PMC';'Emitter'], 'PMC'
     %r = ctor.'new'($P1)
+    %r.'set_vtable_info'($P2)
   done:
 >;
 }

Modified: branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm	Wed Jun 10 22:42:20 2009	(r39499)
+++ branches/pmc_pct/compilers/pmcc/src/emitter/pmc.pm	Wed Jun 10 22:51:05 2009	(r39500)
@@ -46,7 +46,6 @@
 
 method generate_header_functions() {
     my $past := self.past;
-    my %vtables := PMC::VTableInfo::vtable_hash();
 
     my @res_builder;
 
@@ -509,6 +508,16 @@
     self<ucname>;
 }
 
+method set_vtable_info($vtable_info) {
+    our $?vtable_info;
+    $?vtable_info := $vtable_info;
+}
+
+method vtable_info() {
+    our $?vtable_info;
+    $?vtable_info;
+}
+
 # Local Variables:
 #   mode: pir
 #   fill-column: 100

Modified: branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm	Wed Jun 10 22:42:20 2009	(r39499)
+++ branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm	Wed Jun 10 22:51:05 2009	(r39500)
@@ -82,11 +82,11 @@
     );
 
     # For default we have all vtable functions. So, just iterate over all @vtables
-    my @vtables := PMC::VTableInfo::vtable_list();
+    my @vtables := self.vtable_info;
     my @tmp;
     for @vtables {
 #        say("vtable " ~ $_.name ~ ' ' ~ $past<vtables>{$_.name});
-        @tmp.push('Parrot_default_' ~ $_.name); 
+        @tmp.push('Parrot_default_' ~ $_<name>); 
     }
     @res.push(join(",\n        ", @tmp));
 


More information about the parrot-commits mailing list