[ox/std] Add support for messages in ox::Error
This commit is contained in:
parent
89854a584a
commit
540e67fcd8
23
deps/ox/src/ox/std/assert.cpp
vendored
23
deps/ox/src/ox/std/assert.cpp
vendored
@ -32,21 +32,34 @@ void assertFunc<bool>([[maybe_unused]]const char *file, [[maybe_unused]]int line
|
||||
}
|
||||
|
||||
template<>
|
||||
void assertFunc<Error>(const char *file, int line, Error err, const char *msg) {
|
||||
void assertFunc<Error>(const char *file, int line, Error err, const char *assertMsg) {
|
||||
if (err) {
|
||||
panic(file, line, msg, err);
|
||||
std::cerr << "\033[31;1;1mASSERT FAILURE:\033[0m (" << file << ':' << line << "): " << assertMsg << '\n';
|
||||
if (err.msg) {
|
||||
std::cerr << "\tError Message:\t" << err.msg << '\n';
|
||||
}
|
||||
std::cerr << "\tError Code:\t" << err << '\n';
|
||||
if (err.file != nullptr) {
|
||||
std::cerr << "\tError Location:\t" << reinterpret_cast<const char*>(err.file) << ':' << err.line << '\n';
|
||||
}
|
||||
printStackTrace(2);
|
||||
oxTrace("panic").del("") << "Panic: " << assertMsg << " (" << file << ":" << line << ")";
|
||||
std::abort();
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(OX_USE_STDLIB)
|
||||
void panic(const char *file, int line, const char *msg, Error err) {
|
||||
std::cerr << "\033[31;1;1mPANIC:\033[0m (" << file << ':' << line << "): " << msg << '\n';
|
||||
void panic(const char *file, int line, const char *panicMsg, Error err) {
|
||||
std::cerr << "\033[31;1;1mPANIC:\033[0m (" << file << ':' << line << "): " << panicMsg << '\n';
|
||||
if (err.msg) {
|
||||
std::cerr << "\tError Message:\t" << err.msg << '\n';
|
||||
}
|
||||
std::cerr << "\tError Code:\t" << err << '\n';
|
||||
if (err.file != nullptr) {
|
||||
std::cerr << "\tError Location:\t" << reinterpret_cast<const char*>(err.file) << ':' << err.line << '\n';
|
||||
}
|
||||
printStackTrace(2);
|
||||
oxTrace("assert").del("") << "Failed assert: " << msg << " (" << file << ":" << line << ")";
|
||||
oxTrace("panic").del("") << "Panic: " << panicMsg << " (" << file << ":" << line << ")";
|
||||
std::abort();
|
||||
}
|
||||
#endif
|
||||
|
11
deps/ox/src/ox/std/error.hpp
vendored
11
deps/ox/src/ox/std/error.hpp
vendored
@ -13,20 +13,22 @@
|
||||
#include "utility.hpp"
|
||||
|
||||
#ifdef DEBUG
|
||||
#define OxError(x) ox::_error(__FILE__, __LINE__, static_cast<ox::Error>(x))
|
||||
#define OxError(...) ox::_error(__FILE__, __LINE__, __VA_ARGS__)
|
||||
#else
|
||||
#define OxError(x) static_cast<ox::Error>(x)
|
||||
#define OxError(...) static_cast<ox::Error>(__VA_ARGS__)
|
||||
#endif
|
||||
|
||||
namespace ox {
|
||||
|
||||
struct BaseError {
|
||||
const char *msg = nullptr;
|
||||
const char *file = "";
|
||||
uint16_t line = 0;
|
||||
|
||||
BaseError() = default;
|
||||
|
||||
constexpr BaseError(const BaseError &o) noexcept {
|
||||
msg = o.msg;
|
||||
file = o.file;
|
||||
line = o.line;
|
||||
}
|
||||
@ -35,10 +37,11 @@ struct BaseError {
|
||||
|
||||
using Error = Integer<uint64_t, BaseError>;
|
||||
|
||||
static constexpr Error _error(const char *file, uint32_t line, Error errCode) {
|
||||
Error err = errCode;
|
||||
static constexpr Error _error(const char *file, uint32_t line, uint64_t errCode, const char *msg = nullptr) {
|
||||
Error err = static_cast<ox::Error>(errCode);
|
||||
err.file = file;
|
||||
err.line = line;
|
||||
err.msg = msg;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user