[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