#ifndef OMNI_ASSERT_H #define OMNI_ASSERT_H #include #include #include "stdint.h" template [[noreturn]] void panic_impl(const char* file, u32 line, const char* fmt, Args arguments) { fprintf(stderr, "PANIC at %s:%d: ", file, line); fprintf(stderr, fmt, args...); fputs("\n", stderr); abort(); } #define panic(...) panic_impl(__FILE__, __LINE__, __VA_ARGS__) #ifndef NDEBUG # define assert(cond) \ do { \ if (!(cond)) panic("assertion failed: %s", #cond); \ } while (0); #else # define assert(cond) unused(cond) #endif #endif