Skip to content
Permalink
Browse files

assert: Better Emscripten support.

(Better than nothing, that is.)

Fixes Bugzilla #3459.
  • Loading branch information
icculus committed May 19, 2017
1 parent d6f4186 commit e889757bb3c35f63b95c959771a2832ade0e81bb
Showing with 47 additions and 2 deletions.
  1. +47 −2 src/SDL_assert.c
@@ -44,6 +44,11 @@
#endif
#endif

#if defined(__EMSCRIPTEN__)
#include <emscripten.h>
#endif


static SDL_assert_state
SDL_PromptAssertion(const SDL_assert_data *data, void *userdata);

@@ -119,6 +124,10 @@ static SDL_NORETURN void SDL_ExitProcess(int exitcode)
{
#ifdef __WIN32__
ExitProcess(exitcode);
#elif defined(__EMSCRIPTEN__)
emscripten_cancel_main_loop(); /* this should "kill" the app. */
emscripten_force_exit(exitcode); /* this should "kill" the app. */
exit(exitcode);
#else
_exit(exitcode);
#endif
@@ -221,9 +230,45 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
state = (SDL_assert_state)selected;
}
}
#ifdef HAVE_STDIO_H

else
{
#if defined(__EMSCRIPTEN__)
/* This is nasty, but we can't block on a custom UI. */
for ( ; ; ) {
SDL_bool okay = SDL_TRUE;
char *buf = (char *) EM_ASM_INT({
var str =
Pointer_stringify($0) + '\n\n' +
'Abort/Retry/Ignore/AlwaysIgnore? [ariA] :';
var reply = window.prompt(str, "i");
if (reply === null) {
reply = "i";
}
return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL);
}, message);

if (SDL_strcmp(buf, "a") == 0) {
state = SDL_ASSERTION_ABORT;
/* (currently) no break functionality on Emscripten
} else if (SDL_strcmp(buf, "b") == 0) {
state = SDL_ASSERTION_BREAK; */
} else if (SDL_strcmp(buf, "r") == 0) {
state = SDL_ASSERTION_RETRY;
} else if (SDL_strcmp(buf, "i") == 0) {
state = SDL_ASSERTION_IGNORE;
} else if (SDL_strcmp(buf, "A") == 0) {
state = SDL_ASSERTION_ALWAYS_IGNORE;
} else {
okay = SDL_FALSE;
}
free(buf);

if (okay) {
break;
}
}
#elif defined(HAVE_STDIO_H)
/* this is a little hacky. */
for ( ; ; ) {
char buf[32];
@@ -250,8 +295,8 @@ SDL_PromptAssertion(const SDL_assert_data *data, void *userdata)
break;
}
}
}
#endif /* HAVE_STDIO_H */
}

/* Re-enter fullscreen mode */
if (window) {

0 comments on commit e889757

Please sign in to comment.