This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Integrate:
authorNicholas Clark <nick@ccl4.org>
Mon, 27 Dec 2004 20:08:27 +0000 (20:08 +0000)
committerNicholas Clark <nick@ccl4.org>
Mon, 27 Dec 2004 20:08:27 +0000 (20:08 +0000)
[ 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..)

t/lib/h2ph.pht
utils/h2ph.PL
utils/h2xs.PL

index e03cbb9..7b29896 100644 (file)
@@ -4,13 +4,13 @@ no warnings 'redefine';
 
 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);
 }
@@ -19,12 +19,12 @@ unless(defined(&_H2PH_H_)) {
     # "$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);
     }
index c6a39c9..81e23f6 100644 (file)
@@ -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();
@@ -338,7 +338,7 @@ while (defined (my $file = next_file())) {
            }
            $args = (
                @args
-               ? "local(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t    "
+               ? "my(" . (join ',', map "\$$_", @args) . ") = \@_;\n$t    "
                : ""
            );
            my $proto = @args ? '' : '() ';
@@ -391,6 +391,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));
index 9132bc9..2f0f350 100644 (file)
@@ -900,8 +900,8 @@ if( @path_h ){
             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}++;
             }