summaryrefslogtreecommitdiff
path: root/lib/verify.h
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2010-05-05 13:57:26 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2010-05-05 13:57:26 -0700
commit8a11db185bb84ee7d2be080ffc71214e14824767 (patch)
tree5e66987780188c51b2081802a34bd3a146dcba9b /lib/verify.h
parent8465329af7e7da7e9e8c61a3c0f71d4cee89ccd5 (diff)
downloadgnulib-8a11db185bb84ee7d2be080ffc71214e14824767.tar.gz
Further improvements to verify.h, suggested by Eric Blake.
* lib/verify.h (_GL_CONCAT, _GL_CONCAT0, _GL_GENSYM): Renamed from the GL_* versions, to avoid collision with OpenGL. (_GL_COUNTER): New macro, so that we can fall back on __LINE__ if __COUNTER__ doesn't work. Test that __COUNTER__ increments rather than testing merely whether it's defined.
Diffstat (limited to 'lib/verify.h')
-rw-r--r--lib/verify.h29
1 files changed, 16 insertions, 13 deletions
diff --git a/lib/verify.h b/lib/verify.h
index dbca35c817..a0849a8c4b 100644
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -69,9 +69,9 @@
if the entity names are not disambiguated. A workaround is to
attach the current line number to the entity name:
- #define GL_CONCAT0(x, y) x##y
- #define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
- extern struct {...} * GL_CONCAT(dummy,__LINE__);
+ #define _GL_CONCAT0(x, y) x##y
+ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+ extern struct {...} * _GL_CONCAT(dummy,__LINE__);
But this has the problem that two invocations of verify from
within the same macro would collide, since the __LINE__ value
@@ -123,19 +123,22 @@
Use a template type to work around the problem. */
/* Concatenate two preprocessor tokens. */
-# define GL_CONCAT(x, y) GL_CONCAT0 (x, y)
-# define GL_CONCAT0(x, y) x##y
-
-/* __COUNTER__ evaluates to 0, 1, 2,..., adding one one each time the
- preprocessor uses it. If the preprocessor doesn't support this
- builtin macro, define it to 0. */
-# ifndef __COUNTER__
-# define __COUNTER__ 0
+# define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+# define _GL_CONCAT0(x, y) x##y
+
+/* _GL_COUNTER is an integer, preferably one that changes each time we
+ use it. Use __COUNTER__ if it works, falling back on __LINE__
+ otherwise. __LINE__ isn't perfect, but it's better than a
+ constant. */
+# if defined __COUNTER__ && __COUNTER__ != __COUNTER__
+# define _GL_COUNTER __COUNTER__
+# else
+# define _GL_COUNTER __LINE__
# endif
/* Generate a symbol with the given prefix, making it unique if
possible. */
-# define GL_GENSYM(prefix) GL_CONCAT(prefix, __COUNTER__)
+# define _GL_GENSYM(prefix) _GL_CONCAT(prefix, _GL_COUNTER)
/* Verify requirement R at compile-time, as an integer constant expression.
Return 1. */
@@ -155,6 +158,6 @@ template <int w>
trailing ';'. */
# define verify(R) \
- extern int (* GL_GENSYM(verify_function) (void)) [verify_true (R)]
+ extern int (* _GL_GENSYM(verify_function) (void)) [verify_true (R)]
#endif