[svn:parrot] r49309 - branches/generational_gc/lib/Parrot/Pmc2c/PMC

bacek at svn.parrot.org bacek at svn.parrot.org
Sat Sep 25 00:58:32 UTC 2010


Author: bacek
Date: Sat Sep 25 00:58:31 2010
New Revision: 49309
URL: https://trac.parrot.org/parrot/changeset/49309

Log:
Fix generating of WB vtable.

Modified:
   branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm

Modified: branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm
==============================================================================
--- branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm	Sat Sep 25 00:58:16 2010	(r49308)
+++ branches/generational_gc/lib/Parrot/Pmc2c/PMC/WB.pm	Sat Sep 25 00:58:31 2010	(r49309)
@@ -79,6 +79,7 @@
         my $parameters = join ', ',
                          map { s/(\s*\S+\s*\*?\s*)//; $_ }
                          split (/,/, $vt_method->parameters);
+        $parameters = ', ' . $parameters if $parameters;
 
         my $method = Parrot::Pmc2c::Method->new(
             {
@@ -93,11 +94,11 @@
         my $ret     = return_statement($method);
         my $body    = <<"EOC";
         /* Switch vtable here and redispatch to original method */
-        Parrot_gc_write_barrier(interp, _self);
         VTABLE *t = _self->vtable->wb_variant_vtable;
         _self->vtable->wb_variant_vtable = _self->vtable;
         _self->vtable = t;
-        return _self->vtable->$name(interp, $parameters);
+        Parrot_gc_write_barrier(interp, _self);
+        return _self->vtable->$name(interp, _self $parameters);
 EOC
 
         # don't return after a Parrot_ex_throw_from_c_args


More information about the parrot-commits mailing list