[svn:parrot] r39312 - trunk/lib/Parrot/Pmc2c
bacek at svn.parrot.org
bacek at svn.parrot.org
Mon Jun 1 23:12:01 UTC 2009
Author: bacek
Date: Mon Jun 1 23:12:00 2009
New Revision: 39312
URL: https://trac.parrot.org/parrot/changeset/39312
Log:
[pmc2c] Don't use return with expression in void functions. ISO C forbids it. doughera++
Modified:
trunk/lib/Parrot/Pmc2c/PMCEmitter.pm
Modified: trunk/lib/Parrot/Pmc2c/PMCEmitter.pm
==============================================================================
--- trunk/lib/Parrot/Pmc2c/PMCEmitter.pm Mon Jun 1 23:11:26 2009 (r39311)
+++ trunk/lib/Parrot/Pmc2c/PMCEmitter.pm Mon Jun 1 23:12:00 2009 (r39312)
@@ -1009,27 +1009,33 @@
# Gather parameters names
my @parameters = map { s/\s*PMC\s*\*\s*//; $_ } split (/,/, $impl->parameters);
my $parameters = join ', ', @parameters;
+ # ISO C forbids return with expression from void functions.
+ my $return = $impl->return_type =~ /^void\s*$/
+ ? ''
+ : 'return ';
if ($type eq 'DEFAULT' || $type eq 'PMC') {
# For default case we have to handle return manually.
- my ($pcc_signature, $retval, $call_tail, $return)
+ my ($pcc_signature, $retval, $call_tail, $pcc_return)
= $self->gen_defaul_case_wrapping($ssig, @parameters);
$case = <<"CASE";
default:
if (type < enum_class_core_max)
- return $func(INTERP, SELF, $parameters);
+ $return$func(INTERP, SELF, $parameters);
else {
$retval
Parrot_mmd_multi_dispatch_from_c_args(INTERP, "$vt_method_name", "$pcc_signature", SELF, $parameters$call_tail);
- $return
+ $pcc_return
}
+ break;
CASE
}
else {
$case = <<"CASE";
case enum_class_$type:
- return $func(INTERP, SELF, $parameters);
+ $return$func(INTERP, SELF, $parameters);
+ break;
CASE
}
More information about the parrot-commits
mailing list