[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