[svn:parrot] r38439 - branches/pmc_pct/compilers/pmc/src/emitter
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat May 2 05:39:01 UTC 2009
Author: bacek
Date: Sat May 2 05:39:00 2009
New Revision: 38439
URL: https://trac.parrot.org/parrot/changeset/38439
Log:
Reimplement generate_h_file in NQP
Modified:
branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir
branches/pmc_pct/compilers/pmc/src/emitter/pmc.pm
Modified: branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir
==============================================================================
--- branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir Sat May 2 05:18:00 2009 (r38438)
+++ branches/pmc_pct/compilers/pmc/src/emitter/pmc.pir Sat May 2 05:39:00 2009 (r38439)
@@ -54,54 +54,6 @@
-=item C<generate_h_file_functions>
-
-Generate C declarations for vtable functions
-
-=cut
-
-.sub 'generate_h_file_functions' :method
- .local pmc past
- .local string res
- .local pmc vtable_info, vtable_hash
- .local pmc vtables, it, entry, class_init
- .local string pmc_name, vtable_name
-
- .local pmc res_builder
-
- past = self.'past'()
- pmc_name = past.'name'()
-
- $P0 = get_hll_global ['PMC'; 'VTableInfo'], 'vtable_hash'
- vtable_hash = $P0()
-
- concat res, "void Parrot_"
- concat res, pmc_name
- concat res, "_class_init(PARROT_INTERP, int, int);\n"
-
- vtables = self.'!vtables'(past)
-
- it = iter vtables
- loop:
- unless it goto done
- res_builder = new 'ResizableStringArray'
- vtable_name = shift it
- entry = vtables[vtable_name]
- vtable_info = vtable_hash[vtable_name]
-
- # Generate 2 methods. One for read, one for write.
- $S0 = self.'!generate_signature'(pmc_name, entry, 0 :named('ro'))
- push res_builder, $S0
- push res_builder, ";\n"
-
- $S0 = join '', res_builder
- concat res, $S0
-
- goto loop
-
- done:
- .return (res)
-.end
=item C<generate_c_file>
@@ -272,6 +224,7 @@
.tailcall past.'vtables'()
.end
+
# Local Variables:
# mode: pir
# fill-column: 100
Modified: branches/pmc_pct/compilers/pmc/src/emitter/pmc.pm
==============================================================================
--- branches/pmc_pct/compilers/pmc/src/emitter/pmc.pm Sat May 2 05:18:00 2009 (r38438)
+++ branches/pmc_pct/compilers/pmc/src/emitter/pmc.pm Sat May 2 05:39:00 2009 (r38439)
@@ -33,6 +33,48 @@
$res
}
+# =item C<generate_h_file_functions>
+#
+# Generate C declarations for vtable functions
+#
+# =cut
+
+method generate_h_file_functions() {
+ my $past := self.past;
+ my %vtables := PMC::VTableInfo::vtable_hash();
+
+ my @res_builder;
+
+ @res_builder.push("void Parrot_" ~ self.name ~ "_class_init(PARROT_INTERP, int, int);\n");
+
+ my %vtables := self.vtables;
+
+ for %vtables {
+ my $entry := %vtables{$_};
+ @res_builder.push(self.generate_signature($entry, "") ~ ";\n");
+ };
+
+ join('', @res_builder);
+}
+
+method vtables() {
+ self.past.vtables;
+}
+
+method generate_signature($entry, $prefix) {
+ my @res;
+
+ @res.push('PARROT_EXPORT ' ~ $entry.returns() ~ ' Parrot_' ~ self.name ~ '_' ~ $entry.name);
+
+ @res.push('(PARROT_INTERP');
+ for @($entry<parameters>) {
+ @res.push(', ' ~ $_.returns() ~ $_.name);
+ }
+ @res.push(')');
+
+ join('', @res);
+}
+
# Local Variables:
# mode: pir
# fill-column: 100
More information about the parrot-commits
mailing list