2015-02-16 12:09:18 +00:00
|
|
|
From 3bea78d24634e630b610f59957e7a019205a67b2 Mon Sep 17 00:00:00 2001
|
2015-02-12 08:37:39 +00:00
|
|
|
From: Tony Cook <tony@develop-help.com>
|
2015-02-16 12:09:18 +00:00
|
|
|
Date: Mon, 16 Feb 2015 15:57:00 +1100
|
2015-02-12 08:37:39 +00:00
|
|
|
Subject: [PATCH 2/2] h2ph: correct handling of hex constants for the preamble
|
|
|
|
MIME-Version: 1.0
|
|
|
|
Content-Type: text/plain; charset=UTF-8
|
|
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
|
2015-02-16 12:09:18 +00:00
|
|
|
Previously they were treated as identifiers resulting in code
|
|
|
|
generated like C< &0xFFF >.
|
|
|
|
|
|
|
|
We also try to prevent compile-time warnings from large hex integers,
|
|
|
|
the user isn't responsible for the generated code, so we delay those
|
|
|
|
warnings to run-time.
|
|
|
|
|
2015-02-12 08:37:39 +00:00
|
|
|
Signed-off-by: Petr Písař <ppisar@redhat.com>
|
|
|
|
---
|
2015-02-16 12:09:18 +00:00
|
|
|
utils/h2ph.PL | 19 ++++++++++++++++++-
|
|
|
|
1 file changed, 18 insertions(+), 1 deletion(-)
|
2015-02-12 08:37:39 +00:00
|
|
|
|
|
|
|
diff --git a/utils/h2ph.PL b/utils/h2ph.PL
|
2015-02-16 12:09:18 +00:00
|
|
|
index 9a8b14d..d082f22 100644
|
2015-02-12 08:37:39 +00:00
|
|
|
--- a/utils/h2ph.PL
|
|
|
|
+++ b/utils/h2ph.PL
|
|
|
|
@@ -769,7 +769,7 @@ sub inc_dirs
|
|
|
|
sub build_preamble_if_necessary
|
|
|
|
{
|
|
|
|
# Increment $VERSION every time this function is modified:
|
|
|
|
- my $VERSION = 3;
|
|
|
|
+ my $VERSION = 4;
|
|
|
|
my $preamble = "$Dest_dir/_h2ph_pre.ph";
|
|
|
|
|
|
|
|
# Can we skip building the preamble file?
|
2015-02-16 12:09:18 +00:00
|
|
|
@@ -788,6 +788,11 @@ sub build_preamble_if_necessary
|
2015-02-12 08:37:39 +00:00
|
|
|
|
|
|
|
open PREAMBLE, ">$preamble" or die "Cannot open $preamble: $!";
|
|
|
|
print PREAMBLE "# This file was created by h2ph version $VERSION\n";
|
2015-02-16 12:09:18 +00:00
|
|
|
+ # Prevent non-portable hex constants from warning.
|
|
|
|
+ #
|
|
|
|
+ # We still produce an overflow warning if we can't represent
|
|
|
|
+ # a hex constant as an integer.
|
2015-02-12 08:37:39 +00:00
|
|
|
+ print PREAMBLE "no warnings qw(portable);\n";
|
|
|
|
|
|
|
|
foreach (sort keys %define) {
|
|
|
|
if ($opt_D) {
|
2015-02-16 12:09:18 +00:00
|
|
|
@@ -814,6 +819,18 @@ DEFINE
|
2015-02-12 08:37:39 +00:00
|
|
|
# integer:
|
|
|
|
print PREAMBLE
|
|
|
|
"unless (defined &$_) { sub $_() { $1 } }\n\n";
|
2015-02-16 12:09:18 +00:00
|
|
|
+ } elsif ($define{$_} =~ /^([+-]?0x[\da-f]+)U?L{0,2}$/i) {
|
|
|
|
+ # hex integer
|
|
|
|
+ # Special cased, since perl warns on hex integers
|
|
|
|
+ # that can't be represented in a UV.
|
|
|
|
+ #
|
|
|
|
+ # This way we get the warning at time of use, so the user
|
|
|
|
+ # only gets the warning if they happen to use this
|
|
|
|
+ # platform-specific definition.
|
|
|
|
+ my $code = $1;
|
|
|
|
+ $code = "hex('$code')" if length $code > 10;
|
|
|
|
+ print PREAMBLE
|
|
|
|
+ "unless (defined &$_) { sub $_() { $code } }\n\n";
|
|
|
|
} elsif ($define{$_} =~ /^\w+$/) {
|
|
|
|
my $def = $define{$_};
|
|
|
|
if ($isatype{$def}) {
|
2015-02-12 08:37:39 +00:00
|
|
|
--
|
2015-02-16 12:09:18 +00:00
|
|
|
2.1.0
|
2015-02-12 08:37:39 +00:00
|
|
|
|