/* Copyright (c) 2002-2012 Croteam Ltd. All rights reserved. */ #ifndef SE_INCL_ASSERT_H #define SE_INCL_ASSERT_H #ifdef PRAGMA_ONCE #pragma once #endif #ifdef _MSC_VER /* rcg10042001 */ #ifdef __cplusplus extern "C" { #endif /* original VC definition of _assert */ _CRTIMP void __cdecl _assert(void *, void *, unsigned); #ifdef __cplusplus } #endif #endif #ifdef PLATFORM_UNIX /* rcg10042001 */ #include #include #define _assert(x, y, z) assert(0) #endif #ifdef NDEBUG #ifndef ASSERT #define ASSERT(__ignore) ((void)0) #endif #define ASSERTMSG(__ignore1, __ignore2) ((void)0) #define ASSERTALWAYS(__ignore) ((void)0) #define BREAKPOINT ((void)0) #define SAFEBREAKPOINT ((void)0) #define IFDEBUG(__ignore) ((void)0) #define DEBUGSTRING(__ignore) ("") #else /* From VisualC assert.h: Define _CRTIMP */ #ifndef _CRTIMP #ifdef _NTSDK /* definition compatible with NT SDK */ #define _CRTIMP #else /* ndef _NTSDK */ /* current definition */ #ifdef _DLL #define _CRTIMP __declspec(dllimport) #else /* ndef _DLL */ #define _CRTIMP #endif /* _DLL */ #endif /* _NTSDK */ #endif /* _CRTIMP */ /* End: Define _CRTIMP */ // this breakpoint doesn't cause exceptions if not in debugger #ifdef _MSC_VER /* rcg10042001 */ #define SAFEBREAKPOINT try { _asm { int 3 }; } catch(...) {;} #endif #ifdef PLATFORM_UNIX /* rcg10042001 */ #define SAFEBREAKPOINT raise(SIGTRAP) #endif /* CT break point macro */ #define BREAKPOINT \ if (1) { \ SAFEBREAKPOINT; \ _assert("hard-coded breakpoint (CroTeam)",__FILE__,__LINE__); \ } else NOTHING /* CT DEBUG macro -- the expression is executed only in debug version */ #ifndef IFDEBUG #define IFDEBUG(expr) \ expr #endif /* CT assertion macros */ #ifndef ASSERT #define ASSERT(expr) \ if(!(expr)) { \ /*SAFEBREAKPOINT;*/ \ _assert(#expr,__FILE__,__LINE__); \ } else NOTHING #endif #define ASSERTALWAYS(msg) \ if (1) { \ /*SAFEBREAKPOINT;*/ \ _assert(msg,__FILE__,__LINE__); \ } else NOTHING #define ASSERTMSG(expr, msg) \ if(!(expr)) { \ /*SAFEBREAKPOINT;*/ \ _assert(msg,__FILE__,__LINE__); \ } else NOTHING #define DEBUGSTRING(str) (str) #endif #endif /* include-once check. */