[svn:parrot] r49361 - in branches/generational_gc/lib/Parrot/Pmc2c: . PMC
bacek at svn.parrot.org
bacek at svn.parrot.org
Tue Sep 28 09:46:05 UTC 2010
Author: bacek
Date: Tue Sep 28 09:46:05 2010
New Revision: 49361
URL: https://trac.parrot.org/parrot/changeset/49361
Log:
Generate more wb vtables.
Modified:
branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.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 09:45:45 2010 (r49360)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm Tue Sep 28 09:46:05 2010 (r49361)
@@ -67,13 +67,14 @@
}
}
+ my $pmcname = $parent->name;
foreach my $vt_method ( @{ $self->vtable->methods } ) {
my $name = $vt_method->name;
- # Generate WB variant only if we override method constantness
- # with ":write"
- next unless $parent->{has_method}{$name}
- && $parent->vtable_method_does_write($name);
+ #warn "$pmcname $name\n";
+ # Generate WB variant
+ next unless exists $parent->{has_method}{$name};
+ #&& $parent->vtable_method_does_write($name);
# Get parameters. strip type from param
my $parameters = join ', ',
@@ -90,13 +91,14 @@
type => Parrot::Pmc2c::Method::VTABLE,
}
);
- my $pmcname = $parent->name;
my $ret = return_statement($method);
my $body = <<"EOC";
/* Switch vtable here and redispatch to original method */
- VTABLE *t = _self->vtable->wb_variant_vtable;
- _self->vtable->wb_variant_vtable = _self->vtable;
- _self->vtable = t;
+ VTABLE *t = _self->vtable;
+ PARROT_ASSERT(_self->vtable != _self->vtable->wb_variant_vtable);
+ _self->vtable = _self->vtable->wb_variant_vtable;
+ _self->vtable->wb_variant_vtable = t;
+ PARROT_ASSERT(_self->vtable != _self->vtable->wb_variant_vtable);
Parrot_gc_write_barrier(interp, _self);
return _self->vtable->$name(interp, _self $parameters);
EOC
Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Tue Sep 28 09:45:45 2010 (r49360)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Tue Sep 28 09:46:05 2010 (r49361)
@@ -815,15 +815,8 @@
$vtable_updates = '';
foreach my $name ( @{ $self->vtable->names} ) {
next unless exists $self->{has_method}{$name};
- if ($self->vtable_method_does_write($name)) {
- # If we override constantness status of vtable
- if (!$self->vtable->attrs($name)->{write}) {
- $vtable_updates .= " vt->$name = Parrot_${classname}_wb_${name};\n";
- }
- }
- else {
- $vtable_updates .= " vt->$name = Parrot_${classname}_${name};\n";
- }
+ next if $name =~ m{ ^init }xo;
+ $vtable_updates .= " vt->$name = Parrot_${classname}_wb_${name};\n";
}
$vtable_updates .= $set_attr_size;
More information about the parrot-commits
mailing list