78 lines
2.2 KiB
C
78 lines
2.2 KiB
C
/*
|
|
* This software is licensed under the terms of the MIT License.
|
|
* See COPYING for further information.
|
|
* ---
|
|
* Copyright (c) 2011-2024, Lukas Weber <laochailan@web.de>.
|
|
* Copyright (c) 2012-2024, Andrei Alexeyev <akari@taisei-project.org>.
|
|
*/
|
|
|
|
#pragma once
|
|
#include "taisei.h"
|
|
|
|
#include "util/macrohax.h"
|
|
|
|
#undef static_assert
|
|
|
|
#ifdef TAISEI_BUILDCONF_HAVE_STATIC_ASSERT_WITHOUT_MSG
|
|
#define static_assert _Static_assert
|
|
#else
|
|
#define _static_assert_0(cond) _Static_assert(cond, #cond)
|
|
#define _static_assert_1(cond, msg) _Static_assert(cond, msg)
|
|
#define static_assert(cond, ...) \
|
|
MACROHAX_OVERLOAD_NARGS(_static_assert_, __VA_ARGS__)(cond, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
void _ts_assert_fail(
|
|
const char *cond,
|
|
const char *msg,
|
|
const char *func,
|
|
const char *file,
|
|
int line,
|
|
bool use_log
|
|
);
|
|
|
|
#undef assert
|
|
|
|
#if defined(__EMSCRIPTEN__)
|
|
void _emscripten_trap(void);
|
|
#define TRAP() _emscripten_trap()
|
|
#elif defined(NDEBUG)
|
|
#define TRAP() abort()
|
|
#elif defined(__clang__)
|
|
#define TRAP() __builtin_debugtrap()
|
|
#else
|
|
#define TRAP() __builtin_trap()
|
|
#endif
|
|
|
|
#ifdef NDEBUG
|
|
#define _assert(cond, msg, uselog)
|
|
#define _assume(cond, msg, uselog) ASSUME(cond)
|
|
#else
|
|
#define _assert(cond, msg, uselog) ({ \
|
|
if(UNLIKELY(!(cond))) { \
|
|
_ts_assert_fail(#cond, msg, __func__, _TAISEI_SRC_FILE, __LINE__, uselog); \
|
|
TRAP(); \
|
|
} \
|
|
})
|
|
#define _assume(cond, msg, uselog) _assert(cond, msg, uselog)
|
|
#endif
|
|
|
|
#define _assert_0(cond) _assert(cond, NULL, true)
|
|
#define _assert_1(cond, msg) _assert(cond, msg, true)
|
|
#define assert(cond, ...) \
|
|
MACROHAX_OVERLOAD_NARGS(_assert_, __VA_ARGS__)(cond, ##__VA_ARGS__)
|
|
|
|
#define _assert_nolog_0(cond) _assert(cond, NULL, false)
|
|
#define _assert_nolog_1(cond, msg) _assert(cond, msg, false)
|
|
#define assert_nolog(cond, ...) \
|
|
MACROHAX_OVERLOAD_NARGS(_assert_nolog_, __VA_ARGS__)(cond, ##__VA_ARGS__)
|
|
|
|
#define _assume_0(cond) _assume(cond, NULL, true)
|
|
#define _assume_1(cond, msg) _assume(cond, msg, true)
|
|
#define assume(cond, ...) \
|
|
MACROHAX_OVERLOAD_NARGS(_assume_, __VA_ARGS__)(cond, ##__VA_ARGS__)
|
|
|
|
#define _assume_nolog_0(cond) _assume(cond, NULL, false)
|
|
#define _assume_nolog_1(cond, msg) _assume(cond, msg, false)
|
|
#define assume_nolog(cond, ...) \
|
|
MACROHAX_OVERLOAD_NARGS(_assume_nolog_, __VA_ARGS__)(cond, ##__VA_ARGS__)
|