[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