@ -115,6 +115,19 @@ extern bool _err_error_exists;
# define FUNCTION_STR __FUNCTION__
# endif
// Don't use this directly; instead, use any of the CRASH_* macros
# ifdef _MSC_VER
# define GENERATE_TRAP \
__debugbreak ( ) ; \
/* Avoid warning about control paths */ \
for ( ; ; ) { \
}
# else
# define GENERATE_TRAP __builtin_trap();
# endif
// (*): See https://stackoverflow.com/questions/257418/do-while-0-what-is-it-good-for
# define ERR_FAIL_INDEX(m_index, m_size) \
do { \
if ( ( m_index ) < 0 | | ( m_index ) > = ( m_size ) ) { \
@ -122,12 +135,12 @@ extern bool _err_error_exists;
return ; \
} else \
_err_error_exists = false ; \
} while ( 0 ) ;
} while ( 0 ) ; // (*)
/** An index has failed if m_index<0 or m_index >=m_size, the function exists.
* This function returns an error value , if returning Error , please select the most
* appropriate error condition from error_macros . h
*/
* This function returns an error value , if returning Error , please select the most
* appropriate error condition from error_macros . h
*/
# define ERR_FAIL_INDEX_V(m_index, m_size, m_retval) \
do { \
@ -136,7 +149,18 @@ extern bool _err_error_exists;
return m_retval ; \
} else \
_err_error_exists = false ; \
} while ( 0 ) ;
} while ( 0 ) ; // (*)
/** Use this one if there is no sensible fallback, that is, the error is unrecoverable.
* We ' ll return a null reference and try to keep running .
*/
# define CRASH_BAD_INDEX(m_index, m_size) \
do { \
if ( ( m_index ) < 0 | | ( m_index ) > = ( m_size ) ) { \
_err_print_error ( FUNCTION_STR , __FILE__ , __LINE__ , " FATAL: Index " _STR ( m_index ) " out of size ( " _STR ( m_size ) " ). " ) ; \
GENERATE_TRAP \
} \
} while ( 0 ) ; // (*)
/** An error condition happened (m_cond tested true) (WARNING this is the opposite as assert().
* the function will exit .
@ -173,6 +197,17 @@ extern bool _err_error_exists;
_err_error_exists = false ; \
}
/** Use this one if there is no sensible fallback, that is, the error is unrecoverable.
*/
# define CRASH_COND(m_cond) \
{ \
if ( m_cond ) { \
_err_print_error ( FUNCTION_STR , __FILE__ , __LINE__ , " FATAL: Condition ' " _STR ( m_cond ) " ' is true. " ) ; \
GENERATE_TRAP \
} \
}
/** An error condition happened (m_cond tested true) (WARNING this is the opposite as assert().
* the function will exit .
* This function returns an error value , if returning Error , please select the most
@ -234,6 +269,15 @@ extern bool _err_error_exists;
return m_value ; \
}
/** Use this one if there is no sensible fallback, that is, the error is unrecoverable.
*/
# define CRASH_NOW() \
{ \
_err_print_error ( FUNCTION_STR , __FILE__ , __LINE__ , " FATAL: Method/Function Failed. " ) ; \
GENERATE_TRAP \
}
/** Print an error string.
*/