42 lines
1.5 KiB
C
42 lines
1.5 KiB
C
// vim:fileencoding=utf-8:foldmethod=marker
|
|
|
|
#ifndef WAPP_ASSERT_H
|
|
#define WAPP_ASSERT_H
|
|
|
|
#include "../aliases/aliases.h"
|
|
#include "../platform/platform.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <inttypes.h>
|
|
|
|
#ifdef WAPP_PLATFORM_CPP
|
|
BEGIN_C_LINKAGE
|
|
#endif // !WAPP_PLATFORM_CPP
|
|
|
|
#define wapp_static_assert(EXPR, MSG) extern char ASSERTION_FAILED[EXPR ? 1 : -1]
|
|
#define wapp_runtime_assert(EXPR, MSG) __wapp_runtime_assert(EXPR, MSG)
|
|
|
|
#ifdef WAPP_DEBUG_ASSERT
|
|
#define wapp_debug_assert(EXPR, MSG) wapp_runtime_assert(EXPR, MSG)
|
|
#else
|
|
#define wapp_debug_assert(EXPR, MSG)
|
|
#endif
|
|
|
|
#define __wapp_runtime_assert(EXPR, MSG) do { \
|
|
if (!(EXPR)) { \
|
|
fprintf( \
|
|
stderr, \
|
|
"%s:%d (In function `%s`): Assertion failed (%" PRIu32 ")\nDiagnostic: %s\n\n", \
|
|
__FILE__, __LINE__, __func__, \
|
|
EXPR, MSG \
|
|
); \
|
|
abort(); \
|
|
} \
|
|
} while(false)
|
|
|
|
#ifdef WAPP_PLATFORM_CPP
|
|
END_C_LINKAGE
|
|
#endif // !WAPP_PLATFORM_CPP
|
|
|
|
#endif // !WAPP_ASSERT_H
|