[svn:parrot] r38596 - branches/tt631_part3/lib/Parrot/Pmc2c

bacek at svn.parrot.org bacek at svn.parrot.org
Fri May 8 10:41:36 UTC 2009


Author: bacek
Date: Fri May  8 10:41:35 2009
New Revision: 38596
URL: https://trac.parrot.org/parrot/changeset/38596

Log:
Always generate Parrot_Foo_ro_update_vtable function.

Modified:
   branches/tt631_part3/lib/Parrot/Pmc2c/PMCEmitter.pm

Modified: branches/tt631_part3/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/tt631_part3/lib/Parrot/Pmc2c/PMCEmitter.pm	Fri May  8 10:41:17 2009	(r38595)
+++ branches/tt631_part3/lib/Parrot/Pmc2c/PMCEmitter.pm	Fri May  8 10:41:35 2009	(r38596)
@@ -827,28 +827,23 @@
 
 EOC
 
-    my %extra_vt;
-    $extra_vt{ro} = $self->{ro} if $self->{ro};
-
-    for my $k (keys %extra_vt) {
-
-        my $vtable_updates = '';
-        foreach my $vt_method ( @{ $self->$k->vtable->names} ) {
-
-            next unless ($self->$k->implements_vtable($vt_method));
+    # Generate RO vtable for implemented non-updating methods
+    $vtable_updates = '';
+    foreach my $name ( @{ $self->vtable->names} ) {
+        next if $self->vtable_method_does_write($name);
+        next unless exists $self->{has_method}{$name};
 
-            $vtable_updates .= "    vt->$vt_method = Parrot_${classname}_${k}_${vt_method};\n";
-        }
+        $vtable_updates .= "    vt->$name = Parrot_${classname}_${name};\n";
+    }
 
-        $cout .= <<"EOC";
+    $cout .= <<"EOC";
 
-PARROT_EXPORT VTABLE *Parrot_${classname}_${k}_update_vtable(VTABLE *vt) {
+PARROT_EXPORT VTABLE *Parrot_${classname}_ro_update_vtable(VTABLE *vt) {
 $vtable_updates
     return vt;
 }
 
 EOC
-    }
 
     $cout;
 }


More information about the parrot-commits mailing list