diff --git a/deps/ox/src/ox/std/assert.cpp b/deps/ox/src/ox/std/assert.cpp index bda12628..aacd0f72 100644 --- a/deps/ox/src/ox/std/assert.cpp +++ b/deps/ox/src/ox/std/assert.cpp @@ -7,6 +7,7 @@ */ #include "fmt.hpp" +#include "realstd.hpp" #include "stacktrace.hpp" #include "trace.hpp" @@ -14,7 +15,7 @@ namespace ox { -void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err) noexcept { +void panic(StringViewCR file, int const line, StringViewCR panicMsg, Error const&err) noexcept { oxErrf("\033[31;1;1mPANIC:\033[0m [{}:{}]: {}\n", file, line, panicMsg); if (err.msg) { oxErrf("\tError Message:\t{}\n", err.msg); @@ -32,16 +33,19 @@ void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err) #endif } -void panic(const char *file, int line, const char *panicMsg, const Error &err) noexcept { +void panic(const char *file, int const line, char const*panicMsg, Error const&err) noexcept { panic(StringView{file}, line, StringView{panicMsg}, err); } -void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept { +void assertFailFuncRuntime( + StringViewCR file, + int const line, + StringViewCR assertTxt, + StringViewCR msg) noexcept { #ifdef OX_USE_STDLIB - auto output = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg); - output += genStackTrace(2); - oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line); - std::abort(); + auto const st = genStackTrace(2); + oxTracef("assert", "Failed assert: {} ({}) [{}:{}]:\n{}", msg, assertTxt, file, line, st); + abort(); #else oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg); oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line); @@ -49,7 +53,12 @@ void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, #endif } -void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const Error &err, StringViewCR, StringViewCR assertMsg) noexcept { +void assertFailFuncRuntime( + StringViewCR file, + int const line, + [[maybe_unused]] Error const&err, + StringViewCR, + StringViewCR assertMsg) noexcept { #if defined(OX_USE_STDLIB) auto msg = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, assertMsg); if (err.msg) { @@ -62,7 +71,7 @@ void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const E msg += genStackTrace(2); oxErr(msg); oxTracef("assert", "Failed assert: {} [{}:{}]", assertMsg, file, line); - std::abort(); + abort(); #else constexprPanic(file, line, assertMsg); #endif diff --git a/deps/ox/src/ox/std/assert.hpp b/deps/ox/src/ox/std/assert.hpp index 7bce3739..8573e6a1 100644 --- a/deps/ox/src/ox/std/assert.hpp +++ b/deps/ox/src/ox/std/assert.hpp @@ -22,9 +22,15 @@ namespace ox { -void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept; +[[noreturn]] +void panic(StringViewCR file, int line, StringViewCR panicMsg, Error const&err = {}) noexcept; -constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept { +[[noreturn]] +constexpr void constexprPanic( + StringViewCR file, + int const line, + StringViewCR panicMsg, + Error const&err = {}) noexcept { if (!std::is_constant_evaluated()) { panic(file, line, panicMsg, err); } else { @@ -32,10 +38,24 @@ constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg } } -void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept; -void assertFailFuncRuntime(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept; +void assertFailFuncRuntime( + StringViewCR file, + int line, + StringViewCR assertTxt, + StringViewCR msg) noexcept; +void assertFailFuncRuntime( + StringViewCR file, + int line, + Error const&err, + StringViewCR, + StringViewCR assertMsg) noexcept; -constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused]]StringViewCR assertTxt, [[maybe_unused]]StringViewCR msg) noexcept { +constexpr void assertFunc( + StringViewCR file, + int const line, + bool const pass, + [[maybe_unused]]StringViewCR assertTxt, + [[maybe_unused]]StringViewCR msg) noexcept { if (!pass) { if (!std::is_constant_evaluated()) { assertFailFuncRuntime(file, line, assertTxt, msg); @@ -45,7 +65,12 @@ constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused } } -constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept { +constexpr void assertFunc( + StringViewCR file, + int const line, + Error const&err, + StringViewCR, + StringViewCR assertMsg) noexcept { if (err) { if (!std::is_constant_evaluated()) { assertFailFuncRuntime(file, line, err, {}, assertMsg); @@ -55,7 +80,11 @@ constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringV } } -constexpr void expect(StringViewCR file, int line, const auto &actual, const auto &expected) noexcept { +constexpr void expect( + StringViewCR file, + int const line, + auto const&actual, + auto const&expected) noexcept { if (actual != expected) { if (!std::is_constant_evaluated()) { #if defined(OX_USE_STDLIB) diff --git a/deps/ox/src/ox/std/error.hpp b/deps/ox/src/ox/std/error.hpp index 5e6885ce..8161e101 100644 --- a/deps/ox/src/ox/std/error.hpp +++ b/deps/ox/src/ox/std/error.hpp @@ -80,13 +80,13 @@ struct Exception: public std::exception { ox::CString msg = nullptr; ErrorCode errCode = 0; - explicit inline Exception( + explicit Exception( ErrorCode const errCode, std::source_location const&src = std::source_location::current()) noexcept: src{src}, errCode{errCode} {} - explicit inline Exception( + explicit Exception( ErrorCode const errCode, ox::CString msg, std::source_location const&src = std::source_location::current()) noexcept: @@ -94,7 +94,7 @@ struct Exception: public std::exception { msg{msg}, errCode{errCode} {} - explicit inline Exception(Error const&err) noexcept: + explicit Exception(Error const&err) noexcept: src{err.src}, msg{err.msg ? err.msg : ""}, errCode{err.errCode} {} @@ -109,6 +109,7 @@ struct Exception: public std::exception { } }; +[[noreturn]] void panic(char const*file, int line, char const*panicMsg, Error const&err) noexcept; template diff --git a/deps/ox/src/ox/std/realstd.hpp b/deps/ox/src/ox/std/realstd.hpp index 8ce8691f..ec2cff36 100644 --- a/deps/ox/src/ox/std/realstd.hpp +++ b/deps/ox/src/ox/std/realstd.hpp @@ -12,4 +12,13 @@ #include #else #define assert(e) while (!(e)); +#endif + +#if __has_include() +#include +#else +extern "C" { +[[noreturn]] +void abort(); +} #endif \ No newline at end of file