helos1/runtime/panic_assert.h
2021-10-10 14:11:45 +08:00

50 lines
1.2 KiB
C

#pragma once
#ifndef HELOS
#include <assert.h>
#else
#include "../main.h"
#include "stdio.h"
#include "printf.h"
#ifdef __cplusplus
extern "C" {
#endif
#define assert(expr) \
do { \
if (!(expr)) \
Panicf("Assertion failed: (" __FILE__ ":%d[%s]), Expression: %s", __LINE__, __func__, #expr); \
} while (0)
// defined in assembly
noreturn void __Panic_HaltSystem();
// Panic() aborts the system after printing the message and some other information.
noreturn inline static void Panic(const char *message) {
io_Printf("Panic: %s\n", message);
__Panic_HaltSystem();
}
// Panicf() aborts the system after printing the message using vsnprintf.
noreturn inline static void Panicf(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
int ret = vsnprintf(Buffer, HELOS_BUFFER_SIZE, fmt, args);
va_end(args);
io_Printf("Panic: %s\n", Buffer);
__Panic_HaltSystem();
}
#ifdef __cplusplus
}
#endif
#endif // HELOS