[svn:parrot] r40435 - branches/auto_attrs/lib/Parrot/Pmc2c

NotFound at svn.parrot.org NotFound at svn.parrot.org
Thu Aug 6 22:52:47 UTC 2009


Author: NotFound
Date: Thu Aug  6 22:52:43 2009
New Revision: 40435
URL: https://trac.parrot.org/parrot/changeset/40435

Log:
set attr_size value in vtable updates instead of in class init

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

Modified: branches/auto_attrs/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- branches/auto_attrs/lib/Parrot/Pmc2c/PMCEmitter.pm	Thu Aug  6 22:10:17 2009	(r40434)
+++ branches/auto_attrs/lib/Parrot/Pmc2c/PMCEmitter.pm	Thu Aug  6 22:52:43 2009	(r40435)
@@ -602,12 +602,6 @@
 
 EOC
 
-    if ( @{$attributes} && $self->{flags}{auto_attrs} ) {
-    $cout .= <<"EOC";
-        vt->attr_size = sizeof(Parrot_${classname}_attributes);
-EOC
-    }
-
     # init vtable slot
     if ( $self->is_dynamic ) {
         $cout .= <<"EOC";
@@ -647,13 +641,6 @@
             vt_${k}                 = Parrot_${classname}_${k}_get_vtable(interp);
             vt_${k}->base_type      = $enum_name;
             vt_${k}->flags          = $k_flags;
-EOC
-        if ( @{$attributes}  && $self->{flags}{auto_attrs} ) {
-            $cout .= <<"EOC";
-            vt_${k}->attr_size = sizeof(Parrot_${classname}_attributes);
-EOC
-            }
-        $cout .= <<"EOC";
 
             vt_${k}->attribute_defs = attr_defs;
 
@@ -776,6 +763,14 @@
     my $classname = $self->name;
     my $export = $self->is_dynamic ? 'PARROT_DYNEXT_EXPORT ' : 'PARROT_EXPORT';
 
+    my $set_attr_size = "    vt->attr_size = ";
+    if ( @{$self->attributes} && $self->{flags}{auto_attrs} ) {
+        $set_attr_size .= "sizeof(Parrot_${classname}_attributes)";
+    } else {
+        $set_attr_size .= "0";
+    }
+    $set_attr_size .= ";\n";
+
     my $vtable_updates = '';
     for my $name ( @{ $self->vtable->names } ) {
         if (exists $self->{has_method}{$name}) {
@@ -783,6 +778,8 @@
         }
     }
 
+    $vtable_updates .= $set_attr_size;
+
     $cout .= <<"EOC";
 
 $export
@@ -808,6 +805,8 @@
         }
     }
 
+    $vtable_updates .= $set_attr_size;
+
     $cout .= <<"EOC";
 
 $export


More information about the parrot-commits mailing list