Add lovrCheck macro;

lovrCheck is a new way of performing runtime assertions.

It's identical to lovrAssert, except it's compiled out if
LOVR_UNCHECKED is defined.

It is meant to be used for non-mission-critical validation, for
example proper usage of types passed to the Lua API.  lovrAssert
should still be used to check return values from platform APIs.
This commit is contained in:
bjorn 2021-06-05 11:12:00 -06:00
parent 053c318995
commit 7dc54cc264
3 changed files with 13 additions and 13 deletions

View File

@ -1,20 +1,13 @@
#include "util.h"
#include <stdlib.h>
#include <stdio.h>
#include <stdatomic.h>
// Error handling
static void defaultErrorCallback(void* p, const char* format, va_list args) {
fprintf(stderr, "Error: ");
vfprintf(stderr, format, args);
fprintf(stderr, "\n");
}
LOVR_THREAD_LOCAL errorFn* lovrErrorCallback = defaultErrorCallback;
LOVR_THREAD_LOCAL void* lovrErrorUserdata = NULL;
static LOVR_THREAD_LOCAL errorFn* lovrErrorCallback;
static LOVR_THREAD_LOCAL void* lovrErrorUserdata;
void lovrSetErrorCallback(errorFn* callback, void* userdata) {
lovrErrorCallback = callback ? callback : defaultErrorCallback;
lovrErrorCallback = callback;
lovrErrorUserdata = userdata;
}

View File

@ -33,12 +33,16 @@ typedef struct Color { float r, g, b, a; } Color;
// Error handling
typedef void errorFn(void*, const char*, va_list);
extern LOVR_THREAD_LOCAL errorFn* lovrErrorCallback;
extern LOVR_THREAD_LOCAL void* lovrErrorUserdata;
void lovrSetErrorCallback(errorFn* callback, void* userdata);
void LOVR_NORETURN lovrThrow(const char* format, ...);
#define lovrAssert(c, ...) if (!(c)) { lovrThrow(__VA_ARGS__); }
#ifdef LOVR_UNCHECKED
#define lovrCheck(c, ...) ((void) 0)
#else
#define lovrCheck lovrAssert
#endif
// Logging
typedef void logFn(void*, int, const char*, const char*, va_list);
enum { LOG_DEBUG, LOG_INFO, LOG_WARN, LOG_ERROR };

View File

@ -32,7 +32,10 @@ int main(int argc, char** argv) {
exit(0);
}
lovrAssert(os_init(), "Failed to initialize platform");
if (!os_init()) {
fprintf(stderr, "Failed to initialize platform");
exit(1);
}
int status;
bool restart;