[ 23547]
Freak out if h2ph has to translate a macro that contains assembly code.
Subject: [PATCH] h2ph vs __asm__
From: Rafael Garcia-Suarez <rgarciasuarez@mandrakesoft.com>
Date: Thu, 25 Nov 2004 17:24:43 +0100
Message-ID: <
20041125172443.
757a4833@dhcp123.mandrakesoft.com>
[ 23628]
Subject: [perl #32962] h2ph - use of local() in generated code
From: Peter.Dintelmann@dresdner-bank.com (via RT)
Date: 8 Dec 2004 15:49:32 -0000
Message-ID: <rt-3.0.11-32962-102394.11.
065973521948@perl.org>
[ 23629]
Fix test to cope with the previous h2ph change.
[ 23652]
Fix for [perl #32491] h2xs incorrectly parses enums with implicit values
p4raw-link: @23652 on //depot/perl:
baf7177e9c0fbdad246294d1c5ccab2ffb2ea28e
p4raw-link: @23629 on //depot/perl:
3c92c9627796cd16c5fbd7af8565ba482fc80938
p4raw-link: @23628 on //depot/perl:
d02b64de5f9ba499420a267adddd8f43af075dad
p4raw-link: @23547 on //depot/perl:
32aeac00e3860b7bf1ab7236d73b402bf093834b
p4raw-id: //depot/maint-5.8/perl@23687
p4raw-integrated: from //depot/perl@23686 'copy in' t/lib/h2ph.pht
(@21159..) 'merge in' utils/h2xs.PL (@23228..)
p4raw-integrated: from //depot/perl@23547 'ignore' utils/h2ph.PL
(@22933..)
unless(defined(&SQUARE)) {
sub SQUARE {
- local($x) = @_;
+ my($x) = @_;
eval q((($x)*($x)));
}
}
unless(defined(&ERROR)) {
eval 'sub ERROR {
- local($x) = @_;
+ my($x) = @_;
eval q( &fprintf( &stderr, \\"%s\\\\n\\", $x->[2][3][0]));
}' unless defined(&ERROR);
}
# "$Revision h2ph.h,v 1.0 98/05/04 20:42:14 billy $"
undef(&MAX) if defined(&MAX);
eval 'sub MAX {
- local($a,$b) = @_;
+ my($a,$b) = @_;
eval q((($a) > ($b) ? ($a) : ($b)));
}' unless defined(&MAX);
if(defined(&__SOME_UNIMPORTANT_PROPERTY)) {
eval 'sub MIN {
- local($a,$b) = @_;
+ my($a,$b) = @_;
eval q((($a) < ($b) ? ($a) : ($b)));
}' unless defined(&MIN);
}
$curargs{$arg} = 1;
}
$args =~ s/\b(\w)/\$$1/g;
- $args = "local($args) = \@_;\n$t ";
+ $args = "my($args) = \@_;\n$t ";
}
s/^\s+//;
expr();
}
$args = (
@args
- ? "local(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t "
+ ? "my(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t "
: ""
);
my $proto = @args ? '' : '() ';
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));
next if $opt_e && $enum_name =~ /$opt_e/;
my $val = 0;
for my $item (split /,/, $enum_body) {
- my ($key, $declared_val) = $item =~ /(\w+)\s*=\s*(.*)/;
- $val = length($declared_val) ? $declared_val : 1 + $val;
+ my ($key, $declared_val) = $item =~ /(\w+)\s*(?:=\s*(.*))?/;
+ $val = defined($declared_val) && length($declared_val) ? $declared_val : 1 + $val;
$seen_define{$key} = $declared_val;
$const_names{$key}++;
}