summaryrefslogtreecommitdiffhomepage
path: root/compat/assert.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'compat/assert.hpp')
-rw-r--r--compat/assert.hpp61
1 files changed, 42 insertions, 19 deletions
diff --git a/compat/assert.hpp b/compat/assert.hpp
index 8c882b0e..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
+
+
+namespace floormat::debug {
+
+void set_soft_assert_mode(bool value);
+bool soft_assert_mode();
-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();
+
+namespace floormat {
} // namespace floormat
@@ -30,19 +43,29 @@ 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
+#endif
#ifndef FM_NO_DEBUG
#define fm_debug_assert(...) fm_assert(__VA_ARGS__)
#else
-#define fm_debug_assert(...) void()
+#define fm_debug_assert(...) (void())
+#endif
+
+#ifndef FM_NO_DEBUG2
+#define fm_debug2_assert(...) fm_assert(__VA_ARGS__)
+#else
+#define fm_debug2_assert(...) (void())
#endif
#define fm_warn_once(...) do { \
@@ -66,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__)
@@ -83,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__)