summaryrefslogtreecommitdiffhomepage
path: root/compat/assert.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/assert.cpp')
-rw-r--r--compat/assert.cpp38
1 files changed, 25 insertions, 13 deletions
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