Browse Source

emscripten: Don't use legacy JS library functions for assertions

(cherry picked from commit 54f5b73333c6fb067af37f976718a5fef8890931)
(cherry picked from commit a8f0eb4c330526d48dc40f611eb4f2881f32fa3a)
Carl Åstholm 4 months ago
parent
commit
2708e08f40
1 changed files with 15 additions and 18 deletions
  1. 15 18
      src/SDL_assert.c

+ 15 - 18
src/SDL_assert.c

@@ -42,15 +42,7 @@
 #endif
 #endif
 
 
 #if defined(__EMSCRIPTEN__)
 #if defined(__EMSCRIPTEN__)
-    #include <emscripten.h>
-    /* older Emscriptens don't have this, but we need to for wasm64 compatibility. */
-    #ifndef MAIN_THREAD_EM_ASM_PTR
-        #ifdef __wasm64__
-            #error You need to upgrade your Emscripten compiler to support wasm64
-        #else
-            #define MAIN_THREAD_EM_ASM_PTR MAIN_THREAD_EM_ASM_INT
-        #endif
-    #endif
+#include <emscripten.h>
 #endif
 #endif
 
 
 /* The size of the stack buffer to use for rendering assert messages. */
 /* The size of the stack buffer to use for rendering assert messages. */
@@ -259,7 +251,7 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data,
         for (;;) {
         for (;;) {
             SDL_bool okay = SDL_TRUE;
             SDL_bool okay = SDL_TRUE;
             /* *INDENT-OFF* */ /* clang-format off */
             /* *INDENT-OFF* */ /* clang-format off */
-            char *buf = (char *) MAIN_THREAD_EM_ASM_PTR({
+            int reply = MAIN_THREAD_EM_ASM_INT({
                 var str =
                 var str =
                     UTF8ToString($0) + '\n\n' +
                     UTF8ToString($0) + '\n\n' +
                     'Abort/Retry/Ignore/AlwaysIgnore? [ariA] :';
                     'Abort/Retry/Ignore/AlwaysIgnore? [ariA] :';
@@ -267,26 +259,31 @@ static SDL_assert_state SDLCALL SDL_PromptAssertion(const SDL_assert_data *data,
                 if (reply === null) {
                 if (reply === null) {
                     reply = "i";
                     reply = "i";
                 }
                 }
-                return allocate(intArrayFromString(reply), 'i8', ALLOC_NORMAL);
+                return reply.length === 1 ? reply.charCodeAt(0) : -1;
             }, message);
             }, message);
             /* *INDENT-ON* */ /* clang-format on */
             /* *INDENT-ON* */ /* clang-format on */
 
 
-            if (SDL_strcmp(buf, "a") == 0) {
+            switch (reply) {
+            case 'a':
                 state = SDL_ASSERTION_ABORT;
                 state = SDL_ASSERTION_ABORT;
 #if 0 /* (currently) no break functionality on Emscripten */
 #if 0 /* (currently) no break functionality on Emscripten */
-            } else if (SDL_strcmp(buf, "b") == 0) {
+            case 'b':
                 state = SDL_ASSERTION_BREAK;
                 state = SDL_ASSERTION_BREAK;
+                break;
 #endif
 #endif
-            } else if (SDL_strcmp(buf, "r") == 0) {
+            case 'r':
                 state = SDL_ASSERTION_RETRY;
                 state = SDL_ASSERTION_RETRY;
-            } else if (SDL_strcmp(buf, "i") == 0) {
+                break;
+            case 'i':
                 state = SDL_ASSERTION_IGNORE;
                 state = SDL_ASSERTION_IGNORE;
-            } else if (SDL_strcmp(buf, "A") == 0) {
+                break;
+            case 'A':
                 state = SDL_ASSERTION_ALWAYS_IGNORE;
                 state = SDL_ASSERTION_ALWAYS_IGNORE;
-            } else {
+                break;
+            default:
                 okay = SDL_FALSE;
                 okay = SDL_FALSE;
+                break;
             }
             }
-            free(buf);
 
 
             if (okay) {
             if (okay) {
                 break;
                 break;