[svn:parrot] r38746 - branches/pmc_pct/compilers/pmcc/src/emitter/pmc
bacek at svn.parrot.org
bacek at svn.parrot.org
Wed May 13 12:30:19 UTC 2009
Author: bacek
Date: Wed May 13 12:30:18 2009
New Revision: 38746
URL: https://trac.parrot.org/parrot/changeset/38746
Log:
Add pre_method_gen and stub for get_vtable_func into Emitter::PMC::default
Modified:
branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm
Modified: branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm
==============================================================================
--- branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm Wed May 13 12:09:39 2009 (r38745)
+++ branches/pmc_pct/compilers/pmcc/src/emitter/pmc/default.pm Wed May 13 12:30:18 2009 (r38746)
@@ -11,6 +11,47 @@
class PMC::Emitter::PMC::default;
+=item C<pre_method_gen>
+
+Generate bunch of "not_implemented_yet" VTABLE functions.
+
+=cut
+method pre_method_gen() {
+ my @vtables := PMC::VTableInfo::vtable_list();
+ my %vtables := self.vtables;
+
+ for @vtables {
+ if !exists(%vtables, $_.name) {
+ my $entry := PAST::Block.new(
+ :name($_.name),
+ );
+ # FIXME Ugly hack
+ $entry<parameters> := PAST::Op.new(
+ PAST::Val.new(
+ :returns(''),
+ :name($_<parameters>)
+ )
+ );
+
+ $entry.push(
+ PAST::Op.new(
+ :pasttype('inline'),
+ :inline(
+' {
+ cant_do_method(interp, pmc, "' ~ $_.name ~ '");
+}
+'),
+ )
+ );
+ %vtables{$entry.name} := $entry;
+ #say("GENERATING " ~ $_.name);
+ }
+ else {
+ #say("USING " ~ $_.name);
+ }
+ }
+}
+
=item C<get_vtable_func>
Generate C-code for C<Parrot_default_get_vtable> and
@@ -19,6 +60,28 @@
=cut
method get_vtable_func() {
+ my %vtables := self.vtables;
+ my $past := self.past;
+
+ my @res;
+ @res.push('
+PARROT_EXPORT VTABLE* Parrot_default_get_vtable(PARROT_INTERP) {
+
+ static const char attr_defs [] = "";
+'
+ );
+
+# for @vtables {
+# say("vtable " ~ $_.name ~ ' ' ~ $past<vtables>{$_.name});
+# }
+
+ @res.push('
+ return Parrot_clone_vtable(interp, &temp_vtable);
+}
+'
+ );
+
+ join('', @res);
}
=item C<update_vtable_func>
More information about the parrot-commits
mailing list