Create FailWithMessage/AssertWithMessage

Migrate some very frequently called macros from global.h to global.cpp. This reduces Windows release executable size by 43 KB.

After moving ASSERT_M and FAIL_M into void functions, these two virtuals in RageFileBasic.h won't compile as they don't return a value. This changes them to return a default value.
This commit is contained in:
sukibaby
2024-10-08 20:52:25 -07:00
committed by teejusb
parent 59e6e94cf3
commit fbe0e0b658
3 changed files with 35 additions and 8 deletions
+12 -4
View File
@@ -100,12 +100,20 @@ public:
virtual int GetFileSize() const = 0;
virtual int GetFD() { return -1; }
virtual RString GetDisplayPath() const { return RString(); }
virtual RageFileBasic *Copy() const { FAIL_M( "Copying unimplemented" ); }
virtual RageFileBasic* Copy() const
{
FAIL_M("Copying unimplemented");
return nullptr; // Return a default value - the return value is unused
}
protected:
virtual int SeekInternal( int /* iOffset */ ) { FAIL_M( "Seeking unimplemented" ); }
virtual int ReadInternal( void *pBuffer, size_t iBytes ) = 0;
virtual int WriteInternal( const void *pBuffer, size_t iBytes ) = 0;
virtual int SeekInternal(int /* iOffset */)
{
FAIL_M("Seeking unimplemented");
return -1; // Return a default value - the return value is unused
}
virtual int ReadInternal(void* pBuffer, size_t iBytes) = 0;
virtual int WriteInternal(const void* pBuffer, size_t iBytes) = 0;
virtual int FlushInternal() { return 0; }
void EnableReadBuffering();
+13
View File
@@ -25,6 +25,19 @@
#include "archutils/Unix/CrashHandler.h"
#endif
void FailWithMessage(const char* message)
{
CHECKPOINT_M(message);
sm_crash(message);
}
void AssertWithMessage(bool condition, const char* message)
{
if (unlikely(!condition)) {
FailWithMessage(message);
}
}
void sm_crash( const char *reason )
{
#if ( defined(_WIN32) && defined(CRASH_HANDLER) ) || defined(MACOSX) || defined(_XDBG)
+10 -4
View File
@@ -66,13 +66,19 @@ void sm_crash( const char *reason = "Internal error" );
*
* This should probably be used instead of throwing an exception in most
* cases we expect never to happen (but not in cases that we do expect,
* such as DSound init failure.) */
#define FAIL_M(MESSAGE) do { CHECKPOINT_M(MESSAGE); sm_crash(MESSAGE); } while(0)
#define ASSERT_M(COND, MESSAGE) do { if(unlikely(!(COND))) { FAIL_M(MESSAGE); } } while(0)
* such as DSound init failure.)
*
* There are macros here for legacy compatibility so we don't have
* to change or fix hundreds of calls to FAIL_M / ASSERT_M / ASSERT.
*/
void FailWithMessage(const char* message);
#define FAIL_M(MESSAGE) FailWithMessage(MESSAGE)
void AssertWithMessage(bool condition, const char* message);
#define ASSERT_M(COND, MESSAGE) AssertWithMessage((COND), MESSAGE)
#if !defined(CO_EXIST_WITH_MFC)
#define ASSERT(COND) ASSERT_M((COND), "Assertion '" #COND "' failed")
#define ASSERT(COND) AssertWithMessage((COND), "Assertion '" #COND "' failed")
#endif
/** @brief Use this to catch switching on invalid values */