about summary refs log tree commit homepage
path: root/ext/mwrap/check.h
diff options
context:
space:
mode:
Diffstat (limited to 'ext/mwrap/check.h')
-rw-r--r--ext/mwrap/check.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/ext/mwrap/check.h b/ext/mwrap/check.h
new file mode 100644
index 0000000..f4f4ac5
--- /dev/null
+++ b/ext/mwrap/check.h
@@ -0,0 +1,23 @@
+#ifndef CHECK_H
+#define CHECK_H
+#include "gcc.h"
+#include <stdlib.h>
+#include <assert.h>
+/*
+ * standard assert may malloc, but NDEBUG behavior is standardized,
+ * however Perl headers add some weirdness if we undef NDEBUG, so
+ * keep NDEBUG defined and use MWRAP_NO_DEBUG
+ */
+#if defined(NDEBUG) && defined(MWRAP_NO_DEBUG)
+#  define mwrap_assert(expr)
+#  define CHECK(type, expect, expr) (void)(expr)
+#else
+#  define mwrap_assert(x) do { if (caa_unlikely(!(x))) abort(); } while (0)
+#  define CHECK(type, expect, expr) do { \
+        type checkvar = (expr); \
+        mwrap_assert(checkvar==(expect)&& "BUG" && __FILE__ && __LINE__); \
+        (void)checkvar; \
+        } while (0)
+#endif
+
+#endif /* CHECK_H */