BLT/include/blt/std/assert.h

39 lines
1.4 KiB
C
Raw Normal View History

/*
* Created by Brett on 23/08/23.
* Licensed under GNU General Public License V3.0
* See LICENSE file for license detail
*/
#ifndef BLT_ASSERT_H
#define BLT_ASSERT_H
#include <cstdlib>
namespace blt
{
void printStacktrace(char** messages, int size, const char* path, int line);
void b_assert_failed(const char* expression, const char* path, int line);
void b_throw(const char* what, const char* path, int line);
2024-01-31 17:13:22 -05:00
bool assert_print(const char* what);
}
// prints error with stack trace if assertion fails. Does not stop execution.
2023-09-07 00:21:02 -04:00
#define blt_assert(expr) do {static_cast<bool>(expr) ? void(0) : blt::b_assert_failed(#expr, __FILE__, __LINE__) } while (0)
// prints error with stack trace then exits with failure.
2023-10-15 17:48:10 -04:00
#define BLT_ASSERT(expr) do { \
2023-11-13 15:15:27 -05:00
if (!static_cast<bool>(expr)) { \
2023-10-15 17:48:10 -04:00
blt::b_assert_failed(#expr, __FILE__, __LINE__); \
std::exit(EXIT_FAILURE); \
} \
} while (0)
// prints as error but does not throw the exception.
2023-09-07 00:21:02 -04:00
#define blt_throw(throwable) do {blt::b_throw(throwable.what(), __FILE__, __LINE__);} while (0)
// prints as error with stack trace and throws the exception.
2023-09-07 00:21:02 -04:00
#define BLT_THROW(throwable) do {blt::b_throw(throwable.what(), __FILE__, __LINE__); throw throwable;} while(0)
#endif //BLT_ASSERT_H