diff options
Diffstat (limited to 'ext/mwrap/check.h')
-rw-r--r-- | ext/mwrap/check.h | 23 |
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 */ |