[svn:parrot] r49305 - in branches/generational_gc/lib/Parrot/Pmc2c: . PMC
bacek at svn.parrot.org
bacek at svn.parrot.org
Sat Sep 25 00:57:25 UTC 2010
Author: bacek
Date: Sat Sep 25 00:57:25 2010
New Revision: 49305
URL: https://trac.parrot.org/parrot/changeset/49305
Log:
Generate writebarrier method stubs
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 Sat Sep 25 00:57:07 2010 (r49304)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm Sat Sep 25 00:57:25 2010 (r49305)
@@ -31,9 +31,9 @@
use Parrot::Pmc2c::UtilFunctions qw( return_statement );
use Text::Balanced 'extract_bracketed';
-=item C<make_RO($type)>
+=item C<new($type)>
-Create a RO version of the PMC
+Create a WB version of the PMC
=cut
@@ -45,8 +45,12 @@
{
# prepend self to parent
parents => [ $parent->name, @{ $parent->parents } ],
+ # copy flags,
+ flags => $parent->get_flags,
# and alias vtable
vtable => $parent->vtable,
+ # set pmcname
+ name => $parent->name . "_wb",
# set parentname
parentname => $parent->name,
}
@@ -66,13 +70,12 @@
foreach my $vt_method ( @{ $self->vtable->methods } ) {
my $name = $vt_method->name;
- # Generate RO variant only if we override method constantness
+ # Generate WB variant only if we override method constantness
# with ":write"
next unless $parent->{has_method}{$name}
- && $parent->vtable_method_does_write($name)
- && !$parent->vtable->attrs($name)->{write};
+ && $parent->vtable_method_does_write($name);
- my $ro_method = Parrot::Pmc2c::Method->new(
+ my $method = Parrot::Pmc2c::Method->new(
{
name => $name,
parent_name => $parent->name,
@@ -83,14 +86,14 @@
}
);
my $pmcname = $parent->name;
- my $ret = return_statement($ro_method);
+ my $ret = return_statement($method);
my $body = <<EOC;
/* Switch vtable here and redispatch to original method */
EOC
# don't return after a Parrot_ex_throw_from_c_args
- $ro_method->body( Parrot::Pmc2c::Emitter->text($body) );
- $self->add_method($ro_method);
+ $method->body( Parrot::Pmc2c::Emitter->text($body) );
+ $self->add_method($method);
}
return $self;
Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Sat Sep 25 00:57:07 2010 (r49304)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMCEmitter.pm Sat Sep 25 00:57:25 2010 (r49305)
@@ -92,6 +92,10 @@
$ro->gen_methods;
}
+ my $wb = $self->wb;
+ $wb->{emitter} = $self->{emitter};
+ $wb->gen_methods;
+
$c->emit("#include \"pmc_default.h\"\n");
$c->emit( $self->update_vtable_func );
More information about the parrot-commits
mailing list