From: Andres Freund <and...@anarazel.de>

c.h already had parts of the assert support (StaticAssert*) and its the shared
file between postgres.h and postgres_fe.h. This makes it easier to build
frontend programs which have to do the hack.
---
 src/include/c.h           | 65 +++++++++++++++++++++++++++++++++++++++++++++++
 src/include/postgres.h    | 54 ++-------------------------------------
 src/include/postgres_fe.h | 12 ---------
 3 files changed, 67 insertions(+), 64 deletions(-)

diff --git a/src/include/c.h b/src/include/c.h
index f7db157..c30df8b 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -694,6 +694,71 @@ typedef NameData *Name;
 
 
 /*
+ * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
+ * - plai  9/5/90
+ *
+ * It should _NOT_ be defined in releases or in benchmark copies
+ */
+
+/*
+ * Assert() can be used in both frontend and backend code. In frontend code it
+ * just calls the standard assert, if it's available. If use of assertions is
+ * not configured, it does nothing.
+ */
+#ifndef USE_ASSERT_CHECKING
+
+#define Assert(condition)
+#define AssertMacro(condition) ((void)true)
+#define AssertArg(condition)
+#define AssertState(condition)
+
+#elif defined FRONTEND
+
+#include <assert.h>
+#define Assert(p) assert(p)
+#define AssertMacro(p) ((void) assert(p))
+
+#else /* USE_ASSERT_CHECKING && FRONTEND */
+
+/*
+ * Trap
+ *             Generates an exception if the given condition is true.
+ */
+#define Trap(condition, errorType) \
+       do { \
+               if ((assert_enabled) && (condition)) \
+                       ExceptionalCondition(CppAsString(condition), 
(errorType), \
+                                                                __FILE__, 
__LINE__); \
+       } while (0)
+
+/*
+ *     TrapMacro is the same as Trap but it's intended for use in macros:
+ *
+ *             #define foo(x) (AssertMacro(x != 0), bar(x))
+ *
+ *     Isn't CPP fun?
+ */
+#define TrapMacro(condition, errorType) \
+       ((bool) ((! assert_enabled) || ! (condition) || \
+                        (ExceptionalCondition(CppAsString(condition), 
(errorType), \
+                                                                  __FILE__, 
__LINE__), 0)))
+
+#define Assert(condition) \
+               Trap(!(condition), "FailedAssertion")
+
+#define AssertMacro(condition) \
+               ((void) TrapMacro(!(condition), "FailedAssertion"))
+
+#define AssertArg(condition) \
+               Trap(!(condition), "BadArgument")
+
+#define AssertState(condition) \
+               Trap(!(condition), "BadState")
+
+#endif /* USE_ASSERT_CHECKING && !FRONTEND */
+
+
+/*
  * Macros to support compile-time assertion checks.
  *
  * If the "condition" (a compile-time-constant expression) evaluates to false,
diff --git a/src/include/postgres.h b/src/include/postgres.h
index b6e922f..bbe125a 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -25,7 +25,7 @@
  *       -------       ------------------------------------------------
  *             1)              variable-length datatypes (TOAST support)
  *             2)              datum type + support macros
- *             3)              exception handling definitions
+ *             3)              exception handling
  *
  *      NOTES
  *
@@ -627,62 +627,12 @@ extern Datum Float8GetDatum(float8 X);
 
 
 /* ----------------------------------------------------------------
- *                             Section 3:      exception handling definitions
- *                                                     Assert, Trap, etc macros
+ *                             Section 3:      exception handling backend 
support
  * ----------------------------------------------------------------
  */
 
 extern PGDLLIMPORT bool assert_enabled;
 
-/*
- * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
- * - plai  9/5/90
- *
- * It should _NOT_ be defined in releases or in benchmark copies
- */
-
-/*
- * Trap
- *             Generates an exception if the given condition is true.
- */
-#define Trap(condition, errorType) \
-       do { \
-               if ((assert_enabled) && (condition)) \
-                       ExceptionalCondition(CppAsString(condition), 
(errorType), \
-                                                                __FILE__, 
__LINE__); \
-       } while (0)
-
-/*
- *     TrapMacro is the same as Trap but it's intended for use in macros:
- *
- *             #define foo(x) (AssertMacro(x != 0), bar(x))
- *
- *     Isn't CPP fun?
- */
-#define TrapMacro(condition, errorType) \
-       ((bool) ((! assert_enabled) || ! (condition) || \
-                        (ExceptionalCondition(CppAsString(condition), 
(errorType), \
-                                                                  __FILE__, 
__LINE__), 0)))
-
-#ifndef USE_ASSERT_CHECKING
-#define Assert(condition)
-#define AssertMacro(condition) ((void)true)
-#define AssertArg(condition)
-#define AssertState(condition)
-#else
-#define Assert(condition) \
-               Trap(!(condition), "FailedAssertion")
-
-#define AssertMacro(condition) \
-               ((void) TrapMacro(!(condition), "FailedAssertion"))
-
-#define AssertArg(condition) \
-               Trap(!(condition), "BadArgument")
-
-#define AssertState(condition) \
-               Trap(!(condition), "BadState")
-#endif   /* USE_ASSERT_CHECKING */
-
 extern void ExceptionalCondition(const char *conditionName,
                                         const char *errorType,
                         const char *fileName, int lineNumber) 
__attribute__((noreturn));
diff --git a/src/include/postgres_fe.h b/src/include/postgres_fe.h
index af31227..0f35ecc 100644
--- a/src/include/postgres_fe.h
+++ b/src/include/postgres_fe.h
@@ -24,16 +24,4 @@
 
 #include "c.h"
 
-/*
- * Assert() can be used in both frontend and backend code. In frontend code it
- * just calls the standard assert, if it's available. If use of assertions is
- * not configured, it does nothing.
- */
-#ifdef USE_ASSERT_CHECKING
-#include <assert.h>
-#define Assert(p) assert(p)
-#else
-#define Assert(p)
-#endif
-
 #endif   /* POSTGRES_FE_H */
-- 
1.7.12.289.g0ce9864.dirty



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to