X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=utils%2Fh2ph.PL;h=6a5710b80abca88a0a0c4dd36cd15daa6087335e;hb=fe0496b9253e88edaeae0264e2f55168b1a33de1;hp=2e1c499e55ea4a0bae45202f5ea2ccbbe91fe218;hpb=e77cf69f69c718be579e56562724518750ab0766;p=p5sagit%2Fp5-mst-13.2.git diff --git a/utils/h2ph.PL b/utils/h2ph.PL index 2e1c499..6a5710b 100644 --- a/utils/h2ph.PL +++ b/utils/h2ph.PL @@ -142,7 +142,7 @@ while (defined (my $file = next_file())) { $curargs{$arg} = 1; } $args =~ s/\b(\w)/\$$1/g; - $args = "local($args) = \@_;\n$t "; + $args = "my($args) = \@_;\n$t "; } s/^\s+//; expr(); @@ -276,6 +276,8 @@ while (defined (my $file = next_file())) { chomp $next; # drop "#define FOO FOO" in enums $next =~ s/^\s*#\s*define\s+(\w+)\s+\1\s*$//; + # #defines in enums (aliases) + $next =~ s/^\s*#\s*define\s+(\w+)\s+(\w+)\s*$/$1 = $2,/; $_ .= $next; print OUT "# $next\n" if $opt_D; } @@ -288,6 +290,7 @@ while (defined (my $file = next_file())) { my $enum_val = -1; foreach my $enum (@enum_subs) { my ($enum_name, $enum_value) = $enum =~ /^([a-zA-Z_]\w*)(=.+)?$/; + $enum_name or next; $enum_value =~ s/^=//; $enum_val = (length($enum_value) ? $enum_value : $enum_val + 1); if ($opt_h) { @@ -302,14 +305,17 @@ while (defined (my $file = next_file())) { "unless defined(\&$enum_name);\n"); } } - } elsif (/^(?:__extension__\s+)?(?:extern|static)\s+(?:__)?inline(?:__)?\s+/) { # { for vi + } elsif (/^(?:__extension__\s+)?(?:extern|static)\s+(?:__)?inline(?:__)?\s+/ + and !/;\s*$/ and !/{\s*}\s*$/) + { # { for vi # This is a hack to parse the inline functions in the glibc headers. - # Warning: massive kludge ahead. We suppose inline functions are mainly - # constructed like macros. + # Warning: massive kludge ahead. We suppose inline functions + # are mainly constructed like macros. while (1) { last unless defined ($next = next_line($file)); chomp $next; - undef $_, last if $next =~ /__THROW\s*;/; + undef $_, last if $next =~ /__THROW\s*;/ + or $next =~ /^(__extension__|extern|static)\b/; $_ .= " $next"; print OUT "# $next\n" if $opt_D; last if $next =~ /^}|^{.*}\s*$/; @@ -335,7 +341,7 @@ while (defined (my $file = next_file())) { } $args = ( @args - ? "local(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t " + ? "my(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t " : "" ); my $proto = @args ? '' : '() '; @@ -388,6 +394,7 @@ if ($opt_e && (scalar(keys %bad_file) > 0)) { exit $Exit; sub expr { + $new = '"(assembly code)"' and return if /\b__asm__\b/; # freak out. my $joined_args; if(keys(%curargs)) { $joined_args = join('|', keys(%curargs)); @@ -396,7 +403,7 @@ sub expr { s/^\&\&// && do { $new .= " &&"; next;}; # handle && operator s/^\&([\(a-z\)]+)/$1/i; # hack for things that take the address of s/^(\s+)// && do {$new .= ' '; next;}; - s/^0X([0-9A-F]+)[UL]*//i + s/^0X([0-9A-F]+)[UL]*//i && do {my $hex = $1; $hex =~ s/^0+//; if (length $hex > 8 && !$Config{use64bitint}) { @@ -532,7 +539,7 @@ sub next_line while (length $in) { if ($pre_sub_tri_graphs) { - # Preprocess all tri-graphs + # Preprocess all tri-graphs # including things stuck in quoted string constants. $in =~ s/\?\?=/#/g; # | ??=| #| $in =~ s/\?\?\!/|/g; # | ??!| || @@ -545,17 +552,19 @@ sub next_line $in =~ s/\?\?>/}/g; # | ??>| }| } if ($in =~ /^\#ifdef __LANGUAGE_PASCAL__/) { - # Tru64 disassembler.h evilness: mixed C and Pascal. + # Tru64 disassembler.h evilness: mixed C and Pascal. while () { - last if /^\#endif/; + last if /^\#endif/; } + $in = ""; next READ; } if ($in =~ /^extern inline / && # Inlined assembler. $^O eq 'linux' && $file =~ m!(?:^|/)asm/[^/]+\.h$!) { - while () { - last if /^}/; + while () { + last if /^}/; } + $in = ""; next READ; } if ($in =~ s/\\$//) { # \-newline