[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