From 3f545cefdc555634aa7818036ece5cfeb3b8c750 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Fri, 20 Jun 2014 08:05:36 +0000 Subject: [PATCH] CGrammar: Fix arrays of function pointers and function pointers returning pointers --- PBot/VERSION.pm | 2 +- modules/c2english/CGrammar.pm | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/PBot/VERSION.pm b/PBot/VERSION.pm index e55d5e26..5084be3c 100644 --- a/PBot/VERSION.pm +++ b/PBot/VERSION.pm @@ -13,7 +13,7 @@ use warnings; # These are set automatically by the build/commit script use constant { BUILD_NAME => "PBot", - BUILD_REVISION => 657, + BUILD_REVISION => 658, BUILD_DATE => "2014-06-20", }; diff --git a/modules/c2english/CGrammar.pm b/modules/c2english/CGrammar.pm index 040b99f4..4079a142 100644 --- a/modules/c2english/CGrammar.pm +++ b/modules/c2english/CGrammar.pm @@ -145,7 +145,6 @@ external_declaration: function_definition: declaration_specifiers(?) declarator[context => 'function definition'] compound_statement[context => 'function definition'](?) { - print STDERR "wtf9\n", ::Dumper \%item; my $declaration_specifiers = join('', @{$item{'declaration_specifiers(?)'}}); my $name = $item{declarator}->[0]; my $parameter_list = $item{declarator}->[1]; @@ -568,7 +567,6 @@ declaration_list: declaration: declaration_specifiers init_declarator_list(?) ';' { - print STDERR "wtf2\n", ::Dumper \%item; my @init_list = defined $item{'init_declarator_list(?)'}->[0] ? @{$item{'init_declarator_list(?)'}->[0]} : (''); my $init_declaration_list; @@ -591,7 +589,6 @@ declaration: $return .= "Let " unless $arg{context} eq 'struct member'; my @args = ::flatten shift @init_list; - print STDERR "wtf7\n", ::Dumper \@args; my ($first_qualifier, $first_initializer); my $first_identifier = shift @args; @@ -616,6 +613,8 @@ declaration: $first_initializer = ''; } + my $remaining_args = join(' ', @args); + my @initializers; if($first_initializer) { push @initializers, [ $first_identifier, $first_initializer ]; @@ -702,12 +701,15 @@ declaration: } elsif(@identifiers > 1) { $first_qualifier =~ s/pointer/pointers/; } - $return .= "$first_qualifier $item{declaration_specifiers}"; + $return .= "$first_qualifier "; + $return .= "$remaining_args " if $remaining_args; + $return .= $item{declaration_specifiers}; } else { if(@identifiers == 1 and $item{declaration_specifiers} !~ /^(a|an)\s+/) { $return .= $item{declaration_specifiers} =~ m/^[aeiouy]/ ? 'an ' : 'a '; } - $return .= "$item{declaration_specifiers}"; + $return .= "$remaining_args " if $remaining_args; + $return .= $item{declaration_specifiers}; } if(@initializers) { @@ -923,7 +925,6 @@ postfix_productions: } | ('++')(s) { - print STDERR "wtf4\n", ::Dumper \%item; my $increment = join('',@{$item[-1]}); if ($increment) { if ($arg{context} eq 'statement') {