prime/include/musyx/assert.h

73 lines
3.1 KiB
C
Raw Normal View History

2022-12-24 22:54:58 +00:00
#ifndef _MUSYX_ASSERT
#define _MUSYX_ASSERT
2023-03-30 02:27:34 +00:00
#include "musyx/version.h"
2022-12-24 22:54:58 +00:00
extern void OSPanic(const char* file, int line, const char* msg, ...);
2023-02-24 17:42:08 +00:00
extern void OSReport(const char* msg, ...);
2022-12-24 22:54:58 +00:00
2023-03-30 02:27:34 +00:00
static inline unsigned __SOME_ASSERT_DERP1() { return 0; }
2023-03-30 02:27:34 +00:00
static inline unsigned __SOME_ASSERT_DERP2() { return __SOME_ASSERT_DERP1(); }
2023-03-30 02:27:34 +00:00
static inline void __SOME_ASSERT_DERP() { __SOME_ASSERT_DERP2() != 0; }
2022-12-24 22:54:58 +00:00
#ifndef ASSERT
#ifdef _DEBUG
2023-03-30 02:27:34 +00:00
#define MUSY_ASSERT(cond) \
do { \
if (!(cond)) { \
OSPanic(__FILE__, __LINE__, "Failed assertion " #cond); \
} \
__SOME_ASSERT_DERP(); \
} while (0)
2022-12-24 22:54:58 +00:00
#else
#define MUSY_ASSERT(cond)
2022-12-24 22:54:58 +00:00
#endif
#endif
#ifndef MUSY_ASSERT_MSG
2022-12-24 22:54:58 +00:00
#ifdef _DEBUG
2023-03-30 02:27:34 +00:00
#if MUSY_VERSION >= MUSY_VERSION_CHECK(2, 0, 0)
#define MUSY_ASSERT_MSG(cond, msg) \
do { \
s32 tmp = 1; \
s32 tmp2; \
if (!(cond)) { \
OSPanic(__FILE__, __LINE__, msg); \
tmp2 = 0; \
if (tmp2 == 0) { \
tmp = 0; \
} \
} \
} while (0)
#else
#define MUSY_ASSERT_MSG(cond, msg) \
do { \
if (!(cond)) { \
OSPanic(__FILE__, __LINE__, msg); \
} \
} while (0)
#endif
2022-12-24 22:54:58 +00:00
#else
#define MUSY_ASSERT_MSG(cond, msg)
2022-12-24 22:54:58 +00:00
#endif
#endif
2023-02-23 07:04:07 +00:00
#ifndef MUSY_DEBUG
2023-02-24 17:42:08 +00:00
#ifdef _DEBUG
2023-02-23 07:04:07 +00:00
#define MUSY_DEBUG OSReport
2023-03-30 02:27:34 +00:00
#else
2023-02-23 07:04:07 +00:00
#define MUSY_DEBUG
#endif
#endif
2023-03-30 02:27:34 +00:00
#ifndef MUSY_FATAL
#ifdef _DEBUG
#define MUSY_FATAL(msg) OSPanic(__FILE__, __LINE__, msg)
#else
#define MUSY_FATAL
#endif
#endif
2022-12-24 22:54:58 +00:00
#endif // _MUSYX_ASSERT