[svn:parrot] r39615 - in trunk/lib/Parrot/Pmc2c: . PMC
cotto at svn.parrot.org
cotto at svn.parrot.org
Wed Jun 17 07:34:49 UTC 2009
Author: cotto
Date: Wed Jun 17 07:34:48 2009
New Revision: 39615
URL: https://trac.parrot.org/parrot/changeset/39615
Log:
[pmc2c] consolidate variant vtable code, fix an out-of-date comment
Modified:
trunk/lib/Parrot/Pmc2c/PMC/RO.pm
trunk/lib/Parrot/Pmc2c/PMCEmitter.pm
Modified: trunk/lib/Parrot/Pmc2c/PMC/RO.pm
==============================================================================
--- trunk/lib/Parrot/Pmc2c/PMC/RO.pm Wed Jun 17 07:12:42 2009 (r39614)
+++ trunk/lib/Parrot/Pmc2c/PMC/RO.pm Wed Jun 17 07:34:48 2009 (r39615)
@@ -44,7 +44,7 @@
my $self = bless Parrot::Pmc2c::PMC->new(
{
parents => [ $parent->name, @{ $parent->parents } ], # prepend self to parrent
- flags => { ( %{ $parent->get_flags } ), 'is_ro' => 1 }, # copy flags, set is_const
+ flags => { ( %{ $parent->get_flags } ), 'is_ro' => 1 }, # copy flags, set is_ro
name => $parent->name . "_ro", # set pmcname
vtable => $parent->vtable, # and alias vtable
parentname => $parent->name, # set parentname
Modified: trunk/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- trunk/lib/Parrot/Pmc2c/PMCEmitter.pm Wed Jun 17 07:12:42 2009 (r39614)
+++ trunk/lib/Parrot/Pmc2c/PMCEmitter.pm Wed Jun 17 07:34:48 2009 (r39615)
@@ -589,9 +589,6 @@
$cout .= <<"EOC";
if (pass == 0) {
EOC
- for my $k ( keys %extra_vt ) {
- $cout .= " VTABLE *vt_$k;\n";
- }
my $flags = $self->vtable_flags;
$cout .= <<"EOC";
@@ -600,18 +597,9 @@
vt->base_type = $enum_name;
vt->flags = $flags;
vt->attribute_defs = attr_defs;
+ interp->vtables[entry] = vt;
EOC
- for my $k ( keys %extra_vt ) {
- my $k_flags = $self->$k->vtable_flags;
- $cout .= <<"EOC";
- vt_${k} = Parrot_${classname}_${k}_get_vtable(interp);
- vt_${k}->base_type = $enum_name;
- vt_${k}->flags = $k_flags;
- vt_${k}->attribute_defs = attr_defs;
-
-EOC
- }
# init vtable slot
if ( $self->is_dynamic ) {
@@ -639,6 +627,11 @@
isa_hash = parrot_new_hash(interp);
vt->isa_hash = isa_hash;
EOC
+ for my $isa (@isa) {
+ $cout .= <<"EOC";
+ parrot_hash_put(interp, isa_hash, (void *)(CONST_STRING_GEN(interp, "$isa")), PMCNULL);
+EOC
+ }
}
else {
$cout .= <<"EOC";
@@ -646,29 +639,25 @@
EOC
}
- for my $k ( keys %extra_vt ) {
- $cout .= <<"EOC";
- vt_${k}->base_type = entry;
- vt_${k}->whoami = vt->whoami;
- vt_${k}->provides_str = vt->provides_str;
-EOC
- }
for my $k ( keys %extra_vt ) {
+ my $k_flags = $self->$k->vtable_flags;
$cout .= <<"EOC";
- vt->${k}_variant_vtable = vt_${k};
- vt_${k}->${k}_variant_vtable = vt;
- vt_${k}->isa_hash = isa_hash;
-EOC
- }
-
- $cout .= <<"EOC";
- interp->vtables[entry] = vt;
-EOC
+ {
+ VTABLE *vt_$k;
+ vt_${k} = Parrot_${classname}_${k}_get_vtable(interp);
+ vt_${k}->base_type = $enum_name;
+ vt_${k}->flags = $k_flags;
+ vt_${k}->attribute_defs = attr_defs;
+
+ vt_${k}->base_type = entry;
+ vt_${k}->whoami = vt->whoami;
+ vt_${k}->provides_str = vt->provides_str;
+ vt->${k}_variant_vtable = vt_${k};
+ vt_${k}->${k}_variant_vtable = vt;
+ vt_${k}->isa_hash = isa_hash;
+ }
- for my $isa (@isa) {
- $cout .= <<"EOC";
- parrot_hash_put(interp, isa_hash, (void *)(CONST_STRING_GEN(interp, "$isa")), PMCNULL);
EOC
}
More information about the parrot-commits
mailing list