| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #ifndef _SDL_assert_h |
| #define _SDL_assert_h |
|
|
| #include "SDL_config.h" |
|
|
| #include "begin_code.h" |
| |
| #ifdef __cplusplus |
| |
| extern "C" { |
| |
| #endif |
|
|
| #ifndef SDL_ASSERT_LEVEL |
| #ifdef SDL_DEFAULT_ASSERT_LEVEL |
| #define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL |
| #elif defined(_DEBUG) || defined(DEBUG) || \ |
| (defined(__GNUC__) && !defined(__OPTIMIZE__)) |
| #define SDL_ASSERT_LEVEL 2 |
| #else |
| #define SDL_ASSERT_LEVEL 1 |
| #endif |
| #endif |
|
|
| |
| |
| |
| |
| |
|
|
| #if defined(_MSC_VER) && !defined(_WIN32_WCE) |
| |
| extern void __cdecl __debugbreak(void); |
| #define SDL_TriggerBreakpoint() __debugbreak() |
| #elif (defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))) |
| #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) |
| #elif defined(HAVE_SIGNAL_H) |
| #include <signal.h> |
| #define SDL_TriggerBreakpoint() raise(SIGTRAP) |
| #else |
| |
| #define SDL_TriggerBreakpoint() |
| #endif |
|
|
| #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) |
| # define SDL_FUNCTION __func__ |
| #elif ((__GNUC__ >= 2) || defined(_MSC_VER)) |
| # define SDL_FUNCTION __FUNCTION__ |
| #else |
| # define SDL_FUNCTION "???" |
| #endif |
| #define SDL_FILE __FILE__ |
| #define SDL_LINE __LINE__ |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #define SDL_disabled_assert(condition) \ |
| do { (void) sizeof ((condition)); } while (0) |
|
|
| #if (SDL_ASSERT_LEVEL > 0) |
|
|
| typedef enum |
| { |
| SDL_ASSERTION_RETRY, |
| SDL_ASSERTION_BREAK, |
| SDL_ASSERTION_ABORT, |
| SDL_ASSERTION_IGNORE, |
| SDL_ASSERTION_ALWAYS_IGNORE |
| } SDL_assert_state; |
|
|
| typedef struct SDL_assert_data |
| { |
| int always_ignore; |
| unsigned int trigger_count; |
| const char *condition; |
| const char *filename; |
| int linenum; |
| const char *function; |
| const struct SDL_assert_data *next; |
| } SDL_assert_data; |
|
|
| |
| extern DECLSPEC SDL_assert_state SDLCALL SDL_ReportAssertion(SDL_assert_data *, |
| const char *, |
| const char *, int); |
|
|
| |
| |
| |
| |
| |
| |
| |
| #define SDL_enabled_assert(condition) \ |
| do { \ |
| while ( !(condition) ) { \ |
| static struct SDL_assert_data assert_data = { \ |
| 0, 0, #condition, 0, 0, 0, 0 \ |
| }; \ |
| const SDL_assert_state state = SDL_ReportAssertion(&assert_data, \ |
| SDL_FUNCTION, \ |
| SDL_FILE, \ |
| SDL_LINE); \ |
| if (state == SDL_ASSERTION_RETRY) { \ |
| continue; \ |
| } else if (state == SDL_ASSERTION_BREAK) { \ |
| SDL_TriggerBreakpoint(); \ |
| } \ |
| break; \ |
| } \ |
| } while (0) |
|
|
| #endif |
|
|
| |
| #if SDL_ASSERT_LEVEL == 0 |
| # define SDL_assert(condition) SDL_disabled_assert(condition) |
| # define SDL_assert_release(condition) SDL_disabled_assert(condition) |
| # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| #elif SDL_ASSERT_LEVEL == 1 |
| # define SDL_assert(condition) SDL_disabled_assert(condition) |
| # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| #elif SDL_ASSERT_LEVEL == 2 |
| # define SDL_assert(condition) SDL_enabled_assert(condition) |
| # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| # define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) |
| #elif SDL_ASSERT_LEVEL == 3 |
| # define SDL_assert(condition) SDL_enabled_assert(condition) |
| # define SDL_assert_release(condition) SDL_enabled_assert(condition) |
| # define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) |
| #else |
| # error Unknown assertion level. |
| #endif |
|
|
|
|
| typedef SDL_assert_state (SDLCALL *SDL_AssertionHandler)( |
| const SDL_assert_data* data, void* userdata); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( |
| SDL_AssertionHandler handler, |
| void *userdata); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| extern DECLSPEC const SDL_assert_data * SDLCALL SDL_GetAssertionReport(void); |
|
|
| |
| |
| |
| |
| |
| |
| |
| extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); |
|
|
| |
| #ifdef __cplusplus |
| |
| } |
| |
| #endif |
| #include "close_code.h" |
|
|
| #endif |
|
|
| |
|
|