diff options
Diffstat (limited to 'compat/assert.cpp')
| -rw-r--r-- | compat/assert.cpp | 38 |
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 |
