diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2025-02-05 05:09:11 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2025-02-05 06:22:42 +0100 |
commit | 867a22c2a989b3f3a2bc47044226f5f9df6a59fd (patch) | |
tree | 8231559aff691e08c36a18f9c8ef993f420d552f | |
parent | 079696334dc0cb61b61788be99ed19bceb4c1fcd (diff) |
compat/assert: move internal functions to own namespace
-rw-r--r-- | bench/critter.cpp | 4 | ||||
-rw-r--r-- | compat/assert.cpp | 38 | ||||
-rw-r--r-- | compat/assert.hpp | 49 | ||||
-rw-r--r-- | src/script.cpp | 10 | ||||
-rw-r--r-- | test/critter.cpp | 4 |
5 files changed, 68 insertions, 37 deletions
diff --git a/bench/critter.cpp b/bench/critter.cpp index 418a4f9e..d8548452 100644 --- a/bench/critter.cpp +++ b/bench/critter.cpp @@ -1,4 +1,5 @@ #include "compat/debug.hpp" +#include "compat/assert.hpp" #include "compat/function2.hpp" #include "src/critter.hpp" #include "src/world.hpp" @@ -15,6 +16,7 @@ namespace floormat { namespace { +namespace fm_debug = floormat::debug::detail; using enum rotation; using fu2::function_view; using Function = function_view<Ns() const>; @@ -137,7 +139,7 @@ bool run(world& w, const function_view<Ns() const>& make_dt, if (b) [[likely]] return false; else - fm_emit_assert_fail("false", file, line); + fm_debug::emit_abort(file, line, "false"); }; for (i = 0; true; i++) diff --git a/compat/assert.cpp b/compat/assert.cpp index cd6e9af3..3f030b6b 100644 --- a/compat/assert.cpp +++ b/compat/assert.cpp @@ -1,4 +1,5 @@ #include "assert.hpp" +#include "exception.hpp" #include <cstdlib> #include <cstdio> #include <cstdarg> @@ -7,13 +8,15 @@ #pragma GCC diagnostic ignored "-Wformat-nonliteral" #endif -namespace floormat { +namespace floormat::debug::detail { namespace { +bool do_soft_assert = false; + template<bool DoPrefix, bool DoSourceLocation> CORRADE_NEVER_INLINE -void fm_emit_debug_(const char* prefix, const char* file, int line, const char* fmt, va_list arg_ptr) +void emit_debug_(const char* prefix, const char* file, int line, const char* fmt, va_list arg_ptr) { std::fflush(stdout); std::fflush(stderr); @@ -29,31 +32,31 @@ void fm_emit_debug_(const char* prefix, const char* file, int line, const char* } // namespace -void fm_emit_debug(const char* prefix, fm_FORMAT_ARG_MSVC const char* fmt, ...) +void emit_debug(const char* prefix, fm_FORMAT_ARG_MSVC const char* fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); - fm_emit_debug_<true, false>(prefix, nullptr, 0, fmt, arg_ptr); + emit_debug_<true, false>(prefix, nullptr, 0, fmt, arg_ptr); va_end(arg_ptr); } -void fm_emit_debug0(fm_FORMAT_ARG_MSVC const char* fmt, ...) +void emit_debug0(fm_FORMAT_ARG_MSVC const char* fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); - fm_emit_debug_<false, false>(nullptr, nullptr, 0, fmt, arg_ptr); + emit_debug_<false, false>(nullptr, nullptr, 0, fmt, arg_ptr); va_end(arg_ptr); } -void CORRADE_NEVER_INLINE fm_emit_debug_loc(const char* prefix, const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) +void CORRADE_NEVER_INLINE emit_debug_loc(const char* prefix, const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); - fm_emit_debug_<true, true>(prefix, file, line, fmt, arg_ptr); + emit_debug_<true, true>(prefix, file, line, fmt, arg_ptr); va_end(arg_ptr); } -void fm_emit_assert_fail(const char* expr, const char* file, int line) +void emit_assert_fail(const char* expr, const char* file, int line) { std::fflush(stdout); std::fflush(stderr); @@ -62,20 +65,29 @@ void fm_emit_assert_fail(const char* expr, const char* file, int line) std::abort(); } -void fm_emit_abort(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) +void emit_abort(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) { va_list arg_ptr; va_start(arg_ptr, fmt); - fm_emit_debug_<true, true>("fatal: ", file, line, fmt, arg_ptr); + emit_debug_<true, true>("fatal: ", file, line, fmt, arg_ptr); va_end(arg_ptr); std::abort(); } -void fm_emit_abort() +void emit_abort() { std::fflush(stdout); std::fflush(stderr); std::abort(); } -} // namespace floormat +} // namespace floormat::debug::detail + +using namespace floormat::debug::detail; + +namespace floormat::debug { + +void set_soft_assert_mode(bool value) { do_soft_assert = value; } +bool soft_assert_mode() { return detail::do_soft_assert; } + +} // namespace floormat::debug diff --git a/compat/assert.hpp b/compat/assert.hpp index 3daf33ce..1333c6a6 100644 --- a/compat/assert.hpp +++ b/compat/assert.hpp @@ -12,16 +12,29 @@ #define fm_FORMAT_ARG_MSVC #endif -namespace floormat { +namespace floormat::debug::detail { + +void emit_debug(const char* prefix, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(2); +void emit_debug0(fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(1); +void emit_debug_loc(const char* prefix, const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(4); +void emit_debug_loc0(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(3); + +[[noreturn]] CORRADE_NEVER_INLINE void emit_assert_fail(const char* expr, const char* file, int line); +[[noreturn]] CORRADE_NEVER_INLINE void emit_abort(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(3); +[[noreturn]] CORRADE_NEVER_INLINE void emit_abort(); + +} // namespace floormat::debug::detail + -void fm_emit_debug(const char* prefix, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(2); -void fm_emit_debug0(fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(1); -void fm_emit_debug_loc(const char* prefix, const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(4); -void fm_emit_debug_loc0(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(3); +namespace floormat::debug { -[[noreturn]] CORRADE_NEVER_INLINE void fm_emit_assert_fail(const char* expr, const char* file, int line); -[[noreturn]] CORRADE_NEVER_INLINE void fm_emit_abort(const char* file, int line, fm_FORMAT_ARG_MSVC const char* fmt, ...) fm_FORMAT_ARG(3); -[[noreturn]] CORRADE_NEVER_INLINE void fm_emit_abort(); +void set_soft_assert_mode(bool value); +bool soft_assert_mode(); + +} // namespace floormat::debug + + +namespace floormat { } // namespace floormat @@ -30,14 +43,14 @@ void fm_emit_debug_loc0(const char* file, int line, fm_FORMAT_ARG_MSVC const cha #pragma GCC diagnostic ignored "-Wunused-macros" #endif -#define fm_assert(...) ((__VA_ARGS__) ? void() : ::floormat::fm_emit_assert_fail(#__VA_ARGS__, __FILE__, __LINE__)) -#define fm_abort(...) (::floormat::fm_emit_abort(__FILE__, __LINE__, __VA_ARGS__)) -#define fm_warn(...) (::floormat::fm_emit_debug("warning: ", __VA_ARGS__)) -#define fm_error(...) (::floormat::fm_emit_debug("error: ", __VA_ARGS__)) -#define fm_log(...) (::floormat::fm_emit_debug0(__VA_ARGS__)) -#define fm_debug(...) (::floormat::fm_emit_debug0(__VA_ARGS__)) -#define fm_debug_loc(pfx, ...) (::floormat::fm_emit_debug_loc(pfx, __FILE__, __LINE__,__VA_ARGS__)) -#define fm_debug_loc0(...) (::floormat::fm_emit_debug_loc0(__FILE__, __LINE__,__VA_ARGS__)) +#define fm_assert(...) ((__VA_ARGS__) ? void() : ::floormat::debug::detail::emit_assert_fail(#__VA_ARGS__, __FILE__, __LINE__)) +#define fm_abort(...) (::floormat::debug::detail::emit_abort(__FILE__, __LINE__, __VA_ARGS__)) +#define fm_warn(...) (::floormat::debug::detail::emit_debug("warning: ", __VA_ARGS__)) +#define fm_error(...) (::floormat::debug::detail::emit_debug("error: ", __VA_ARGS__)) +#define fm_log(...) (::floormat::debug::detail::emit_debug0(__VA_ARGS__)) +#define fm_debug(...) (::floormat::debug::detail::emit_debug0(__VA_ARGS__)) +#define fm_debug_loc(pfx, ...) (::floormat::debug::detail::emit_debug_loc(pfx, __FILE__, __LINE__,__VA_ARGS__)) +#define fm_debug_loc0(...) (::floormat::debug::detail::emit_debug_loc0(__FILE__, __LINE__,__VA_ARGS__)) #if defined FM_NO_DEBUG && !defined FM_NO_DEBUG2 #define FM_NO_DEBUG2 @@ -76,7 +89,7 @@ void fm_emit_debug_loc0(const char* file, int line, fm_FORMAT_ARG_MSVC const cha ERR_nospace << #__VA_ARGS__; \ ERR_nospace << " expected: " << a; \ ERR_nospace << " actual: " << b; \ - fm_emit_abort(); \ + ::floormat::debug::detail::emit_abort(); \ } \ })(__VA_ARGS__) @@ -93,7 +106,7 @@ void fm_emit_debug_loc0(const char* file, int line, fm_FORMAT_ARG_MSVC const cha ERR_nospace << #__VA_ARGS__; \ ERR_nospace << "not expected: " << a; \ ERR_nospace << " actual: " << b; \ - fm_emit_abort(); \ + ::floormat::debug::detail::emit_abort(); \ } \ })(__VA_ARGS__) diff --git a/src/script.cpp b/src/script.cpp index f2b7d30d..23d11e0d 100644 --- a/src/script.cpp +++ b/src/script.cpp @@ -5,6 +5,8 @@ namespace floormat { namespace { +namespace fm_debug = floormat::debug::detail; + constexpr StringView names[(size_t)script_lifecycle::COUNT] = { "no-init"_s, "initializing"_s, "created"_s, "destroying"_s, "torn-down"_s, @@ -23,10 +25,10 @@ StringView base_script::state_name(script_lifecycle x) void base_script::_assert_state(script_lifecycle old_state, script_lifecycle s, const char* file, int line) { if (old_state != s) [[unlikely]] - fm_emit_abort(file, line, - "invalid state transition from '%s' to '%s'", - state_name(old_state).data(), - state_name(s).data()); + fm_debug::emit_abort(file, line, + "invalid state transition from '%s' to '%s'", + state_name(old_state).data(), + state_name(s).data()); } base_script::~base_script() noexcept = default; diff --git a/test/critter.cpp b/test/critter.cpp index 90619ce8..5b7ee52d 100644 --- a/test/critter.cpp +++ b/test/critter.cpp @@ -18,6 +18,8 @@ namespace floormat { namespace { +namespace fm_debug = floormat::debug::detail; + using enum rotation; using fu2::function_view; using Function = function_view<Ns() const>; @@ -147,7 +149,7 @@ bool run(world& w, const function_view<Ns() const>& make_dt, if (b) [[likely]] return false; else - fm_emit_assert_fail("false", file, line); + fm_debug::emit_abort(file, line, "false"); }; for (i = 0; true; i++) |