From: Nicholas Clark Date: Mon, 31 Oct 2005 14:18:14 +0000 (+0000) Subject: Arrange to only output each symbol once into global.sym X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=2b10efc65b3c9f7954b63da8917689cb9bab0804;p=p5sagit%2Fp5-mst-13.2.git Arrange to only output each symbol once into global.sym p4raw-id: //depot/perl@25923 --- diff --git a/embed.pl b/embed.pl index a88016c..2ef42aa 100755 --- a/embed.pl +++ b/embed.pl @@ -243,20 +243,27 @@ sub write_protos { $ret; } -# generates global.sym (API export list), and populates %global with global symbols -sub write_global_sym { - my $ret = ""; - if (@_ > 1) { - my ($flags,$retval,$func,@args) = @_; - if ($flags =~ /[AX]/ && $flags !~ /[xm]/ - || $flags =~ /b/) { # public API, so export - $func = "Perl_$func" if $flags =~ /[pbX]/; - $ret = "$func\n"; - } - } - $ret; +# generates global.sym (API export list) +{ + my %seen; + sub write_global_sym { + my $ret = ""; + if (@_ > 1) { + my ($flags,$retval,$func,@args) = @_; + # If a function is defined twice, for example before and after an + # #else, only process the flags on the first instance for global.sym + return $ret if $seen{$func}++; + if ($flags =~ /[AX]/ && $flags !~ /[xm]/ + || $flags =~ /b/) { # public API, so export + $func = "Perl_$func" if $flags =~ /[pbX]/; + $ret = "$func\n"; + } + } + $ret; + } } + our $unflagged_pointers; walk_table(\&write_protos, "proto.h", undef, "/* ex: set ro: */\n"); warn "$unflagged_pointers pointer arguments to clean up\n" if $unflagged_pointers;