[svn:parrot] r49372 - in branches/generational_gc/lib/Parrot/Pmc2c: . PMC
bacek at svn.parrot.org
bacek at svn.parrot.org
Tue Sep 28 23:18:04 UTC 2010
Author: bacek
Date: Tue Sep 28 23:18:03 2010
New Revision: 49372
URL: https://trac.parrot.org/parrot/changeset/49372
Log:
Generate wb_variant_vtable in more sane way: get current vtable and update it using parent's wb_update_vtable
Modified:
branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm
branches/generational_gc/lib/Parrot/Pmc2c/PMC/default.pm
branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm
Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm Tue Sep 28 23:17:09 2010 (r49371)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm Tue Sep 28 23:18:03 2010 (r49372)
@@ -73,8 +73,8 @@
#warn "$pmcname $name\n";
# Generate WB variant
- next unless exists $parent->{has_method}{$name};
- #&& $parent->vtable_method_does_write($name);
+ next unless exists $parent->{has_method}{$name}
+ && $parent->vtable_method_does_write($name);
# Get parameters. strip type from param
my $parameters = join ', ',
Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMC/default.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMC/default.pm Tue Sep 28 23:17:09 2010 (r49371)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMC/default.pm Tue Sep 28 23:18:03 2010 (r49372)
@@ -150,6 +150,24 @@
EOC
+ # Generate WB vtable for implemented non-updating methods
+ my $vtable_updates = '';
+ foreach my $name ( @{ $self->vtable->names} ) {
+ next unless exists $self->{has_method}{$name}
+ && $self->vtable_method_does_write($name);
+ next if $name =~ m{ ^init }xo;
+ $vtable_updates .= " vt->$name = Parrot_default_wb_${name};\n";
+ }
+
+ $cout .= <<"EOC";
+
+PARROT_EXPORT
+VTABLE *Parrot_default_wb_update_vtable(ARGMOD(VTABLE *vt)) {
+$vtable_updates
+ return vt;
+}
+
+EOC
$cout;
}
Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Tue Sep 28 23:17:09 2010 (r49371)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Tue Sep 28 23:18:03 2010 (r49372)
@@ -814,7 +814,8 @@
# Generate WB vtable for implemented non-updating methods
$vtable_updates = '';
foreach my $name ( @{ $self->vtable->names} ) {
- next unless exists $self->{has_method}{$name};
+ next unless exists $self->{has_method}{$name}
+ && $self->vtable_method_does_write($name);
next if $name =~ m{ ^init }xo;
$vtable_updates .= " vt->$name = Parrot_${classname}_wb_${name};\n";
}
@@ -995,14 +996,8 @@
EOC
- $get_extra_vtable = '';
-
- if ($first_parent eq 'default') {
- $get_extra_vtable .= " vt = Parrot_default_wb_get_vtable(interp);\n";
- }
- else {
- $get_extra_vtable .= " vt = Parrot_${first_parent}_wb_get_vtable(interp);\n";
- }
+ $get_extra_vtable .= " vt = Parrot_${classname}_get_vtable(interp);\n";
+ #$get_extra_vtable .= " Parrot_${first_parent}_wb_update_vtable(interp);\n";
foreach my $parent_name ( @other_parents ) {
$get_extra_vtable .= " Parrot_${parent_name}_wb_update_vtable(vt);\n";
More information about the parrot-commits
mailing list