[svn:parrot] r46003 - trunk/lib/Parrot/Pmc2c

NotFound at svn.parrot.org NotFound at svn.parrot.org
Sun Apr 25 09:41:42 UTC 2010


Author: NotFound
Date: Sun Apr 25 09:41:41 2010
New Revision: 46003
URL: https://trac.parrot.org/parrot/changeset/46003

Log:
assign to multi_func_list content instead of initializing in C code generated from .pmc, TT #652 part 2

Modified:
   trunk/lib/Parrot/Pmc2c/PMCEmitter.pm

Modified: trunk/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- trunk/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Apr 25 04:20:46 2010	(r46002)
+++ trunk/lib/Parrot/Pmc2c/PMCEmitter.pm	Sun Apr 25 09:41:41 2010	(r46003)
@@ -476,6 +476,7 @@
     my $multi_strings = '';
     my $cache         = {};
 
+    my $i = 0;
     for my $multi (@$multi_funcs) {
         my ($name, $ssig, $fsig, $ns, $func) = @$multi;
         my ($name_str, $ssig_str, $fsig_str, $ns_name)     =
@@ -487,21 +488,23 @@
                    [$ns,   $ns_name ]) {
             my ($raw_string, $name) = @$s;
             next if $strings_seen{$name}++;
-            $multi_strings .=  "        STRING * const $name = "
+            $multi_strings .=  "            STRING * const $name = "
                            . qq|CONST_STRING_GEN(interp, "$raw_string");\n|;
         }
 
         push @multi_list, <<END_MULTI_LIST;
-        { $name_str,
-          $ssig_str,
-          $fsig_str,
-          $ns_name,
-          (funcptr_t) $func }
+            _temp_multi_func_list[$i].multi_name = $name_str;
+            _temp_multi_func_list[$i].short_sig = $ssig_str;
+            _temp_multi_func_list[$i].full_sig = $fsig_str;
+            _temp_multi_func_list[$i].ns_name = $ns_name;
+            _temp_multi_func_list[$i].func_ptr = (funcptr_t) $func;
 END_MULTI_LIST
+        $i++;
 
     }
 
-    my $multi_list = join( ",\n", @multi_list);
+    my $multi_list_size = @multi_list;
+    my $multi_list = join( "\n", @multi_list);
 
     my @isa = grep { $_ ne 'default' } @{ $self->parents };
 
@@ -695,12 +698,10 @@
         # Don't const the list, breaks some older C compilers
         $cout .= $multi_strings . <<"EOC";
 
-            multi_func_list _temp_multi_func_list[] = {
-                $multi_list
-            };
-#define N_MULTI_LIST (sizeof(_temp_multi_func_list)/sizeof(_temp_multi_func_list[0]))
+            multi_func_list _temp_multi_func_list[$multi_list_size];
+$multi_list
             Parrot_mmd_add_multi_list_from_c_args(interp,
-                _temp_multi_func_list, N_MULTI_LIST);
+                _temp_multi_func_list, $multi_list_size);
 EOC
     }
 


More information about the parrot-commits mailing list