diff --git a/src/embind/emval.js b/src/embind/emval.js index 41f5ca5656924..675db1b2ac0b9 100644 --- a/src/embind/emval.js +++ b/src/embind/emval.js @@ -447,9 +447,9 @@ var LibraryEmVal = { _emval_await__deps: ['$Emval', '$Asyncify'], _emval_await__async: true, _emval_await: (promise) => { - return Asyncify.handleAsync(() => { - promise = Emval.toValue(promise); - return promise.then(Emval.toHandle); + return Asyncify.handleAsync(async () => { + var value = await Emval.toValue(promise); + return Emval.toHandle(value); }); }, #endif @@ -468,10 +468,9 @@ var LibraryEmVal = { }, _emval_coro_suspend__deps: ['$Emval', '_emval_coro_resume'], - _emval_coro_suspend: (promiseHandle, awaiterPtr) => { - Emval.toValue(promiseHandle).then(result => { - __emval_coro_resume(awaiterPtr, Emval.toHandle(result)); - }); + _emval_coro_suspend: async (promiseHandle, awaiterPtr) => { + var result = await Emval.toValue(promiseHandle); + __emval_coro_resume(awaiterPtr, Emval.toHandle(result)); }, _emval_coro_make_promise__deps: ['$Emval', '__cxa_rethrow'], diff --git a/src/jsifier.mjs b/src/jsifier.mjs index b9a4ae1a5f4e0..604d204832dcc 100644 --- a/src/jsifier.mjs +++ b/src/jsifier.mjs @@ -338,7 +338,7 @@ function(${args}) { MEMORY64 && rtnType == 'p' ? 'proxyToMainThreadPtr' : 'proxyToMainThread'; deps.push('$' + proxyFunc); return ` -function(${args}) { +${async_}function(${args}) { if (ENVIRONMENT_IS_PTHREAD) return ${proxyFunc}(${proxiedFunctionTable.length}, 0, ${+sync}${args ? ', ' : ''}${args}); ${body} diff --git a/src/library_browser.js b/src/library_browser.js index 6a098a48813d4..721a27df7f996 100644 --- a/src/library_browser.js +++ b/src/library_browser.js @@ -652,7 +652,7 @@ var LibraryBrowser = { // TODO: currently not callable from a pthread, but immediately calls onerror() if not on main thread. emscripten_async_load_script__deps: ['$UTF8ToString'], - emscripten_async_load_script: (url, onload, onerror) => { + emscripten_async_load_script: async (url, onload, onerror) => { url = UTF8ToString(url); #if PTHREADS if (ENVIRONMENT_IS_PTHREAD) { @@ -687,10 +687,13 @@ var LibraryBrowser = { #if ENVIRONMENT_MAY_BE_NODE && DYNAMIC_EXECUTION if (ENVIRONMENT_IS_NODE) { - readAsync(url, false).then((data) => { + try { + var data = await readAsync(url, false); eval(data); loadDone(); - }, loadError); + } catch { + loadError(); + } return; } #endif diff --git a/src/library_trace.js b/src/library_trace.js index f45ea94a01c7e..e356881d0de00 100644 --- a/src/library_trace.js +++ b/src/library_trace.js @@ -58,29 +58,29 @@ var LibraryTracing = { }, // Work around CORS issues ... - fetchBlob: (url) => { - return fetch(url).then((rsp) => rsp.blob()); + fetchBlob: async (url) => { + var rsp = await fetch(url); + return rsp.blob(); }, - configure: (collector_url, application) => { + configure: async (collector_url, application) => { EmscriptenTrace.now = _emscripten_get_now; var now = new Date(); var session_id = now.getTime().toString() + '_' + Math.floor((Math.random() * 100) + 1).toString(); - EmscriptenTrace.fetchBlob(collector_url + 'worker.js').then((blob) => { - EmscriptenTrace.worker = new Worker(window.URL.createObjectURL(blob)); - EmscriptenTrace.worker.addEventListener('error', (e) => { - out('TRACE WORKER ERROR:'); - out(e); - }, false); - EmscriptenTrace.worker.postMessage({ 'cmd': 'configure', - 'data_version': EmscriptenTrace.DATA_VERSION, - 'session_id': session_id, - 'url': collector_url }); - EmscriptenTrace.configured = true; - EmscriptenTrace.collectorEnabled = true; - EmscriptenTrace.postEnabled = true; - }); + var blob = await EmscriptenTrace.fetchBlob(collector_url + 'worker.js'); + EmscriptenTrace.worker = new Worker(window.URL.createObjectURL(blob)); + EmscriptenTrace.worker.addEventListener('error', (e) => { + out('TRACE WORKER ERROR:'); + out(e); + }, false); + EmscriptenTrace.worker.postMessage({ 'cmd': 'configure', + 'data_version': EmscriptenTrace.DATA_VERSION, + 'session_id': session_id, + 'url': collector_url }); + EmscriptenTrace.configured = true; + EmscriptenTrace.collectorEnabled = true; + EmscriptenTrace.postEnabled = true; EmscriptenTrace.post([EmscriptenTrace.EVENT_APPLICATION_NAME, application]); EmscriptenTrace.post([EmscriptenTrace.EVENT_SESSION_NAME, now.toISOString()]); }, diff --git a/src/library_wget.js b/src/library_wget.js index 279913d0e19b4..578ae81129e65 100644 --- a/src/library_wget.js +++ b/src/library_wget.js @@ -62,10 +62,11 @@ var LibraryWget = { emscripten_async_wget_data__deps: ['$asyncLoad', 'malloc', 'free', '$callUserCallback'], emscripten_async_wget_data__proxy: 'sync', - emscripten_async_wget_data: (url, userdata, onload, onerror) => { + emscripten_async_wget_data: async (url, userdata, onload, onerror) => { {{{ runtimeKeepalivePush() }}} /* no need for run dependency, this is async but will not do any prepare etc. step */ - asyncLoad(UTF8ToString(url)).then((byteArray) => { + try { + var byteArray = await asyncLoad(UTF8ToString(url)); {{{ runtimeKeepalivePop() }}} callUserCallback(() => { var buffer = _malloc(byteArray.length); @@ -73,14 +74,14 @@ var LibraryWget = { {{{ makeDynCall('vppi', 'onload') }}}(userdata, buffer, byteArray.length); _free(buffer); }); - }, () => { + } catch (e) { if (onerror) { {{{ runtimeKeepalivePop() }}} callUserCallback(() => { {{{ makeDynCall('vp', 'onerror') }}}(userdata); }); } - }); + } }, emscripten_async_wget2__deps: ['$PATH_FS', '$wget', '$stackRestore', '$stringToUTF8OnStack'], diff --git a/src/postamble.js b/src/postamble.js index c4c25cfb4a8d8..644d6509864e4 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -40,9 +40,9 @@ dependenciesFulfilled = function runCaller() { #if HAS_MAIN #if MAIN_READS_PARAMS -function callMain(args = []) { +{{{ asyncIf(ASYNCIFY == 2) }}} function callMain(args = []) { #else -function callMain() { +{{{ asyncIf(ASYNCIFY == 2) }}} function callMain() { #endif #if ASSERTIONS assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); @@ -100,18 +100,12 @@ function callMain() { // The current spec of JSPI returns a promise only if the function suspends // and a plain value otherwise. This will likely change: // https://github.com/WebAssembly/js-promise-integration/issues/11 - Promise.resolve(ret).then((result) => { - exitJS(result, /* implicit = */ true); - }).catch((e) => { - handleException(e); - }); -#else + ret = await ret; +#endif // ASYNCIFY == 2 // if we're not running an evented main loop, it's time to exit exitJS(ret, /* implicit = */ true); -#endif // ASYNCIFY == 2 return ret; - } - catch (e) { + } catch (e) { return handleException(e); } #if ABORT_ON_WASM_EXCEPTIONS diff --git a/src/preamble.js b/src/preamble.js index 5e31b92d017a2..b256582a05589 100644 --- a/src/preamble.js +++ b/src/preamble.js @@ -1091,7 +1091,7 @@ function getWasmImports() { var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); receiveInstantiationResult(result); #if LOAD_SOURCE_MAP - receiveSourceMapJSON(await getSourceMapPromise()); + receiveSourceMapJSON(await getSourceMapAsync()); #endif return result; #if MODULARIZE diff --git a/src/source_map_support.js b/src/source_map_support.js index 4f2f23d84fc22..84e1bfee66fe1 100644 --- a/src/source_map_support.js +++ b/src/source_map_support.js @@ -106,11 +106,14 @@ function getSourceMap() { return JSON.parse(UTF8ArrayToString(buf)); } -function getSourceMapPromise() { +async function getSourceMapAsync() { if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - return fetch(wasmSourceMapFile, {{{ makeModuleReceiveExpr('fetchSettings', "{ credentials: 'same-origin' }") }}}) - .then((response) => response.json()) - .catch(getSourceMap); + try { + var response = await fetch(wasmSourceMapFile, {{{ makeModuleReceiveExpr('fetchSettings', "{ credentials: 'same-origin' }") }}}); + return response.json(); + } catch { + // Fall back to getSourceMap below + } } - return Promise.resolve(getSourceMap()); + return getSourceMap(); } diff --git a/test/browser_reporting.js b/test/browser_reporting.js index 0ba4b90482de6..64fc270b986f5 100644 --- a/test/browser_reporting.js +++ b/test/browser_reporting.js @@ -2,7 +2,7 @@ var hasModule = typeof Module === 'object' && Module; var reportingURL = 'http://localhost:8888/'; -function reportResultToServer(result) { +async function reportResultToServer(result) { if (reportResultToServer.reported) { // Only report one result per test, even if the test misbehaves and tries to report more. reportErrorToServer(`excessive reported results, sending ${result}, test will fail`); @@ -11,12 +11,11 @@ function reportResultToServer(result) { if ((typeof ENVIRONMENT_IS_NODE !== 'undefined' && ENVIRONMENT_IS_NODE) || (typeof ENVIRONMENT_IS_AUDIO_WORKLET !== 'undefined' && ENVIRONMENT_IS_AUDIO_WORKLET)) { out(`RESULT: ${result}`); } else { - fetch(`${reportingURL}/report_result?${encodeURIComponent(result)}`).then(() => { - if (typeof window === 'object' && window && hasModule && !Module['pageThrewException']) { - /* for easy debugging, don't close window on failure */ - window.close(); - } - }); + await fetch(`${reportingURL}/report_result?${encodeURIComponent(result)}`); + if (typeof window === 'object' && window && hasModule && !Module['pageThrewException']) { + /* for easy debugging, don't close window on failure */ + window.close(); + } } } diff --git a/test/other/test_unoptimized_code_size.js.size b/test/other/test_unoptimized_code_size.js.size index cf69ddfe4a77e..c92d2e5e9cfeb 100644 --- a/test/other/test_unoptimized_code_size.js.size +++ b/test/other/test_unoptimized_code_size.js.size @@ -1 +1 @@ -53981 +53980 diff --git a/test/other/test_unoptimized_code_size_no_asserts.js.size b/test/other/test_unoptimized_code_size_no_asserts.js.size index 2aba7946a2888..27713e9b085b4 100644 --- a/test/other/test_unoptimized_code_size_no_asserts.js.size +++ b/test/other/test_unoptimized_code_size_no_asserts.js.size @@ -1 +1 @@ -29401 +29400 diff --git a/test/other/test_unoptimized_code_size_strict.js.size b/test/other/test_unoptimized_code_size_strict.js.size index b958a7dffaa33..b9b5998b7a2be 100644 --- a/test/other/test_unoptimized_code_size_strict.js.size +++ b/test/other/test_unoptimized_code_size_strict.js.size @@ -1 +1 @@ -52777 +52776