@@ -401,7 +401,10 @@ if ($opt_e && (scalar(keys %bad_file) > 0)) {
401
401
exit $Exit;
402
402
403
403
sub expr {
404
- $new = '"(assembly code)"' and return if /\b__asm__\b/; # freak out.
404
+ if (/\b__asm__\b/) { # freak out
405
+ $new = '"(assembly code)"';
406
+ return
407
+ }
405
408
my $joined_args;
406
409
if(keys(%curargs)) {
407
410
$joined_args = join('|', keys(%curargs));
@@ -770,7 +773,7 @@ sub inc_dirs
770
773
sub build_preamble_if_necessary
771
774
{
772
775
# Increment $VERSION every time this function is modified:
773
- my $VERSION = 2 ;
776
+ my $VERSION = 3 ;
774
777
my $preamble = "$Dest_dir/_h2ph_pre.ph";
775
778
776
779
# Can we skip building the preamble file?
@@ -798,7 +801,16 @@ sub build_preamble_if_necessary
798
801
# parenthesized value: d=(v)
799
802
$define{$_} = $1;
800
803
}
801
- if ($define{$_} =~ /^([+-]?(\d+)?\.\d+([eE][+-]?\d+)?)[FL]?$/) {
804
+ if (/^(\w+)\((\w)\)$/) {
805
+ my($macro, $arg) = ($1, $2);
806
+ my $def = $define{$_};
807
+ $def =~ s/$arg/\$\{$arg\}/g;
808
+ print PREAMBLE <<DEFINE;
809
+ unless (defined &$macro) { sub $macro(\$) { my (\$$arg) = \@_; \"$def\" } }
810
+
811
+ DEFINE
812
+ } elsif
813
+ ($define{$_} =~ /^([+-]?(\d+)?\.\d+([eE][+-]?\d+)?)[FL]?$/) {
802
814
# float:
803
815
print PREAMBLE
804
816
"unless (defined &$_) { sub $_() { $1 } }\n\n";
@@ -807,8 +819,14 @@ sub build_preamble_if_necessary
807
819
print PREAMBLE
808
820
"unless (defined &$_) { sub $_() { $1 } }\n\n";
809
821
} elsif ($define{$_} =~ /^\w+$/) {
810
- print PREAMBLE
811
- "unless (defined &$_) { sub $_() { &$define{$_} } }\n\n";
822
+ my $def = $define{$_};
823
+ if ($isatype{$def}) {
824
+ print PREAMBLE
825
+ "unless (defined &$_) { sub $_() { \"$def\" } }\n\n";
826
+ } else {
827
+ print PREAMBLE
828
+ "unless (defined &$_) { sub $_() { &$def } }\n\n";
829
+ }
812
830
} else {
813
831
print PREAMBLE
814
832
"unless (defined &$_) { sub $_() { \"",
0 commit comments