feat(miscellaneous): add DO_CHECK and check_code() assertion macros

This commit is contained in:
_Redstone_c_ 2023-01-09 22:00:34 +08:00
parent d825285a4a
commit d8543421a0

View File

@ -35,6 +35,12 @@ private:
NAMESPACE_PRIVATE_END
#if BUILD_DEBUG || BUILD_DEVELOPMENT
# define DO_CHECK 1
#else
# define DO_CHECK 0
#endif
#define always_check(InExpr) RS_CHECK_IMPL(InExpr)
#define always_checkf(InExpr, InFormat, ...) RS_CHECK_F_IMPL(InExpr, InFormat, ##__VA_ARGS__)
#define always_check_no_entry() always_checkf(false, "Enclosing block should never be called.")
@ -42,9 +48,11 @@ NAMESPACE_PRIVATE_END
#define always_check_no_recursion() static uint8 PREPROCESSOR_JOIN(RecursionCounter, __LINE__) = 0; always_checkf(PREPROCESSOR_JOIN(RecursionCounter, __LINE__) == 0, "Enclosing block was entered recursively."); const NAMESPACE_REDCRAFT::NAMESPACE_PRIVATE::FRecursionScopeMarker PREPROCESSOR_JOIN(ScopeMarker, __LINE__)(PREPROCESSOR_JOIN(RecursionCounter, __LINE__))
#define always_unimplemented() always_checkf(false, "Unimplemented function called.")
#if BUILD_DEBUG || BUILD_DEVELOPMENT
#if DO_CHECK
# define check(InExpr) always_check(InExpr)
# define check_code(InCode) do InCode while(false)
# define check(InExpr) check_code({ always_check(InExpr); })
# define checkf(InExpr, InFormat, ...) always_checkf(InExpr, InFormat, ##__VA_ARGS__)
# define check_no_entry() always_check_no_entry()
# define check_no_reentry() always_check_no_reentry()
@ -55,6 +63,8 @@ NAMESPACE_PRIVATE_END
#else
# define check_code(InCode)
# define check(InExpr)
# define checkf(InExpr, InFormat, ...)
# define check_no_entry()