[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