changeset 6302:71bde2024cdc

(verify_expr): Remove, replacing with: (verify_true): New macro that returns true instead of void. (verify_type__): Remove. (verify): Use verify_true rather than verify_type__.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 27 Sep 2005 05:36:30 +0000
parents 015760832874
children 563c73f35d69
files lib/verify.h
diffstat 1 files changed, 16 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lib/verify.h
+++ b/lib/verify.h
@@ -23,24 +23,26 @@
 
 /* Each of these macros verifies that its argument R is a nonzero
    constant expression.  To be portable, R's type must be integer (or
-   boolean).  Unlike assert, there is no run-time overhead.  */
+   boolean).  Unlike assert, there is no run-time overhead.
 
-/* A type that is valid if and only if R is a nonzero constant expression.
-   The symbols verify_type__ and verify_error_if_negative_size__ are
-   private to this header file.  */
+   There are two macros, since no single macro can be used in all
+   contexts in C.  verify_true (R) is for scalar contexts, where it
+   may be cast to void if need be.  verify (R) is for declaration
+   contexts, e.g., the top level.
 
-# define verify_type__(R) \
-    struct { unsigned int verify_error_if_negative_size__ : (R) ? 1 : -1; }
+   The symbols verify_error_if_negative_size__ and verify_function__
+   are private to this header.  */
 
-/* Verify requirement R at compile-time, as a declaration.  */
-
-# define verify(R) \
-    extern int (* verify_function__ (void)) [sizeof (verify_type__ (R))]
+/* Verify requirement R at compile-time, as an integer constant expression.
+   Return true.  */
 
-/* Verify requirement R at compile-time, as an expression.
-   This macro can be used in some contexts where verify cannot, and vice versa.
-   Return void.  */
+# define verify_true(R) \
+    (!!sizeof \
+     (struct { unsigned int verify_error_if_negative_size__ : (R) ? 1 : -1; }))
 
-# define verify_expr(R) ((void) ((verify_type__ (R) *) 0))
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  */
+
+# define verify(R) extern int (* verify_function__ (void)) [verify_true (R)]
 
 #endif