summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2025-02-05 05:09:11 +0100
committerStanislaw Halik <sthalik@misaki.pl>2025-02-05 06:22:42 +0100
commit867a22c2a989b3f3a2bc47044226f5f9df6a59fd (patch)
tree8231559aff691e08c36a18f9c8ef993f420d552f
parent079696334dc0cb61b61788be99ed19bceb4c1fcd (diff)
compat/assert: move internal functions to own namespace
-rw-r--r--bench/critter.cpp4
-rw-r--r--compat/assert.cpp38
-rw-r--r--compat/assert.hpp49
-rw-r--r--src/script.cpp10
-rw-r--r--test/critter.cpp4
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++)