[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] cpp: make the check of Flex version portable
From: |
Théophile Ranquet |
Subject: |
[PATCH] cpp: make the check of Flex version portable |
Date: |
Wed, 5 Dec 2012 18:23:24 +0100 |
Hi,
While trying to compile Bison with the Tiny C Compiler, I ran into an
issue with this macro. This is due to 'defined' having an (no pun
intended) undefined behavior when expanded by a macro, if I am to
trust what is said here:
<http://gcc.gnu.org/onlinedocs/cpp/Defined.html>
Thus, I suggest rewriting it as follows. Note that, alongside this, a
very minor change is needed to src/graphviz.c for Bison to compile
with success: should I include that change in this commit, or should I
make it a separate one?
>From b56484a5d3f983b163287f5bf0a77b80529200cf Mon Sep 17 00:00:00 2001
From: Theophile Ranquet <address@hidden>
Date: Wed, 5 Dec 2012 18:26:36 +0100
Subject: [PATCH] cpp: make the check of Flex version portable
This was problematic with tcc 0.9.25
* src/flex-scanner.h (FLEX_VERSION_GT): Rewrite and rename as...
(FLEX_VERSION): This.
---
src/flex-scanner.h | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/flex-scanner.h b/src/flex-scanner.h
index 9979841..028082e 100644
--- a/src/flex-scanner.h
+++ b/src/flex-scanner.h
@@ -23,18 +23,18 @@
/* Whether this version of Flex is (strictly) greater than
Major.Minor.Subminor. */
-#define FLEX_VERSION_GT(Major, Minor, Subminor) \
- (defined YY_FLEX_MAJOR_VERSION \
- && (Major < YY_FLEX_MAJOR_VERSION \
- || (Major == YY_FLEX_MAJOR_VERSION \
- && (defined YY_FLEX_MINOR_VERSION \
- && (Minor < YY_FLEX_MINOR_VERSION \
- || (Minor == YY_FLEX_MINOR_VERSION \
- && defined YY_FLEX_SUBMINOR_VERSION \
- && Subminor < YY_FLEX_SUBMINOR_VERSION))))))
-
+#ifdef YY_FLEX_SUBMINOR_VERSION
+# define FLEX_VERSION \
+ (YY_FLEX_MAJOR_VERSION) * 1000000 \
++ (YY_FLEX_MINOR_VERSION) * 1000 \
++ (YY_FLEX_SUBMINOR_VERSION)
+#else
+# define FLEX_VERSION \
+ (YY_FLEX_MAJOR_VERSION) * 1000000 \
++ (YY_FLEX_MINOR_VERSION) * 1000
+#endif
/* Pacify "gcc -Wmissing-prototypes" when flex 2.5.31 is used. */
-# if ! FLEX_VERSION_GT (2, 5, 31)
+# if FLEX_VERSION <= 2005031
int FLEX_PREFIX (get_lineno) (void);
FILE *FLEX_PREFIX (get_in) (void);
FILE *FLEX_PREFIX (get_out) (void);
@@ -65,7 +65,7 @@ int FLEX_PREFIX (lex_destroy) (void);
versions according to the Flex manual) leak memory if yylex_destroy is not
invoked. However, yylex_destroy is not defined before Flex 2.5.9, so give
an implementation here that at least appears to work with Flex 2.5.4. */
-#if ! FLEX_VERSION_GT (2, 5, 9)
+#if FLEX_VERSION <= 2005009
# define yylex_destroy() yy_delete_buffer (YY_CURRENT_BUFFER)
#endif
--
1.8.0
- [PATCH] cpp: make the check of Flex version portable,
Théophile Ranquet <=