#pragma once #include #if !defined(OLD_DEBUG_LEVEL) #define OLD_DEBUG_LEVEL 0 #else #undef OLD_DEBUG_LEVEL #if DEBUG_LEVEL>=3 #define OLD_DEBUG_LEVEL 3 #elif DEBUG_LEVEL==2 #define OLD_DEBUG_LEVEL 2 #elif DEBUG_LEVEL==1 #define OLD_DEBUG_LEVEL 1 #endif #endif #undef DEBUG_LEVEL #undef Verify #undef Verify_And_Dump #undef Warn #undef Warn_And_Dump #undef Dump #undef Tell #undef Check_Signature #undef Check_Pointer #undef Mem_Copy #undef Str_Copy #undef Str_Cat #undef Check #undef Check_Fpu #undef Fail #undef Cast_Object #undef DEBUG_CODE #undef Sqrt #undef Arctan #undef Arccos #undef Arcsin #define DEBUG_LEVEL 0 #define DEBUG_CODE(x) #define Verify(c) #define Verify_And_Dump(c,v) #define Warn(c) #define Warn_And_Dump(c,v) #define Dump(v) #define Tell(m) #define Check_Pointer(p) #define Check_Fpu() #define Mem_Copy(destination, source, length, available) memcpy(destination, source, length) #define Str_Copy(destination, source, available) strcpy(destination, source); #define Str_Cat(destination, source, available) strcat(destination, source); #define Sqrt(value) sqrt(value) #define Arctan(y,x) atan2(y,x) #define Arccos(x) acos(x) #define Arcsin(x) asin(x) #define Power(x,y) pow(x,y) #define Check(p) #define Check_Signature(p) // // A release build used to answer Fail("clipping_radius not defined") with a // bare abort(), throwing the message away - and because the compiler merges // identical cold paths, every Fail in a function became the same anonymous // stub. A crash then told you the function and nothing else, which cost an // afternoon of disassembly to learn that a mission review build stops in // L4AudioRenderer::Initialize without ever saying which of its nine checks // was the one that tripped. // // The debug build has always routed this to a function that prints the // message with its file and line. Release now does too. The termination is // unchanged - still abort(), still exit code 0xC0000409 - so nothing // downstream sees anything different; it just says what happened on the way // out. // extern void Fail_With_Message(const char *message, const char *file, int line); #define Fail(m) Fail_With_Message(m, __FILE__, __LINE__) #define Cast_Object(type, ptr) ((type)(ptr))