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++)  | 
