From 0236db0130c6e9b9e5313a080332acb060824264 Mon Sep 17 00:00:00 2001 From: Sam Clegg Date: Mon, 15 Jun 2026 16:07:10 -0700 Subject: [PATCH] Simplify async behaviour of `run` function. NFC The async/await handling was added in #27059S. This change simplifies things by making it the only way to do things. --- src/lib/libbrowser.js | 4 ++-- src/lib/libcore.js | 3 +++ src/postamble.js | 16 +++------------- test/codesize/test_codesize_cxx_ctors1.json | 4 ++-- test/codesize/test_codesize_cxx_ctors2.json | 8 ++++---- test/codesize/test_codesize_cxx_except.json | 8 ++++---- test/codesize/test_codesize_cxx_except_wasm.json | 8 ++++---- .../test_codesize_cxx_except_wasm_legacy.json | 4 ++-- test/codesize/test_codesize_cxx_lto.json | 8 ++++---- test/codesize/test_codesize_cxx_mangle.json | 8 ++++---- test/codesize/test_codesize_cxx_noexcept.json | 4 ++-- .../test_codesize_file_preload.expected.js | 10 +++++----- test/codesize/test_codesize_file_preload.json | 8 ++++---- test/codesize/test_codesize_files_js_fs.json | 8 ++++---- test/codesize/test_codesize_hello_dylink.json | 8 ++++---- .../codesize/test_codesize_hello_dylink_all.json | 4 ++-- 16 files changed, 53 insertions(+), 60 deletions(-) diff --git a/src/lib/libbrowser.js b/src/lib/libbrowser.js index e28324bdb7819..dd33e9fa994a0 100644 --- a/src/lib/libbrowser.js +++ b/src/lib/libbrowser.js @@ -614,7 +614,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', '$runDependencies', '$dependenciesFulfilled'], + emscripten_async_load_script__deps: ['$UTF8ToString', '$runDependencies', '$resolveRunDeps'], emscripten_async_load_script: async (url, onload, onerror) => { url = UTF8ToString(url); #if PTHREADS @@ -634,7 +634,7 @@ var LibraryBrowser = { if (onload) { var onloadCallback = () => callUserCallback({{{ makeDynCall('v', 'onload') }}}); if (runDependencies > 0) { - dependenciesFulfilled = onloadCallback; + resolveRunDeps().then(onloadCallback); } else { onloadCallback(); } diff --git a/src/lib/libcore.js b/src/lib/libcore.js index e12adf857b47f..81bf30d01a969 100644 --- a/src/lib/libcore.js +++ b/src/lib/libcore.js @@ -2266,11 +2266,14 @@ addToLibrary({ // Note that you can add dependencies in preRun, even though // it happens right before run - run will be postponed until // the dependencies are met. + $runDependencies__deps: ['$resolveRunDeps'], $runDependencies__internal: true, $runDependencies: 0, // overridden to take different actions when all run dependencies are fulfilled $dependenciesFulfilled__internal: true, $dependenciesFulfilled: null, + $resolveRunDeps__internal: true, + $resolveRunDeps: () => new Promise((resolve) => dependenciesFulfilled = resolve), #if ASSERTIONS $runDependencyTracking__internal: true, $runDependencyTracking: {}, diff --git a/src/postamble.js b/src/postamble.js index 430ce3358e150..0dc4e66a2cc07 100644 --- a/src/postamble.js +++ b/src/postamble.js @@ -114,19 +114,14 @@ function stackCheckInit() { } #endif -{{{ asyncIf(MODULARIZE) }}}function run({{{ MAIN_READS_PARAMS ? 'args = programArgs' : '' }}}) { +{{{ asyncIf(MODULARIZE || '$runDependencies' in addedLibraryItems) }}}function run({{{ MAIN_READS_PARAMS ? 'args = programArgs' : '' }}}) { #if '$runDependencies' in addedLibraryItems if (runDependencies > 0) { #if RUNTIME_DEBUG dbg('run() called, but dependencies remain, so not running'); #endif -#if MODULARIZE - await new Promise((resolve) => dependenciesFulfilled = resolve); -#else - dependenciesFulfilled = run; - return; -#endif + await resolveRunDeps(); } #endif @@ -149,12 +144,7 @@ function stackCheckInit() { #if RUNTIME_DEBUG dbg('run() called, but dependencies remain, so not running'); #endif -#if MODULARIZE - await new Promise((resolve) => dependenciesFulfilled = resolve); -#else - dependenciesFulfilled = run; - return; -#endif + await resolveRunDeps(); } #endif diff --git a/test/codesize/test_codesize_cxx_ctors1.json b/test/codesize/test_codesize_cxx_ctors1.json index fe704633a5333..0150b0e93079c 100644 --- a/test/codesize/test_codesize_cxx_ctors1.json +++ b/test/codesize/test_codesize_cxx_ctors1.json @@ -1,9 +1,9 @@ { - "a.out.js": 19192, + "a.out.js": 19198, "a.out.js.gz": 7944, "a.out.nodebug.wasm": 132666, "a.out.nodebug.wasm.gz": 49962, - "total": 151858, + "total": 151864, "total_gz": 57906, "sent": [ "__cxa_throw", diff --git a/test/codesize/test_codesize_cxx_ctors2.json b/test/codesize/test_codesize_cxx_ctors2.json index abaec01958ad3..375d8dcff39ff 100644 --- a/test/codesize/test_codesize_cxx_ctors2.json +++ b/test/codesize/test_codesize_cxx_ctors2.json @@ -1,10 +1,10 @@ { - "a.out.js": 19169, - "a.out.js.gz": 7931, + "a.out.js": 19175, + "a.out.js.gz": 7932, "a.out.nodebug.wasm": 132092, "a.out.nodebug.wasm.gz": 49625, - "total": 151261, - "total_gz": 57556, + "total": 151267, + "total_gz": 57557, "sent": [ "__cxa_throw", "_abort_js", diff --git a/test/codesize/test_codesize_cxx_except.json b/test/codesize/test_codesize_cxx_except.json index 539d488994e3c..4e19d807a27fa 100644 --- a/test/codesize/test_codesize_cxx_except.json +++ b/test/codesize/test_codesize_cxx_except.json @@ -1,10 +1,10 @@ { - "a.out.js": 23166, - "a.out.js.gz": 8928, + "a.out.js": 23172, + "a.out.js.gz": 8931, "a.out.nodebug.wasm": 172586, "a.out.nodebug.wasm.gz": 57501, - "total": 195752, - "total_gz": 66429, + "total": 195758, + "total_gz": 66432, "sent": [ "__cxa_begin_catch", "__cxa_end_catch", diff --git a/test/codesize/test_codesize_cxx_except_wasm.json b/test/codesize/test_codesize_cxx_except_wasm.json index 9b062493420b1..dfe04efe1b0aa 100644 --- a/test/codesize/test_codesize_cxx_except_wasm.json +++ b/test/codesize/test_codesize_cxx_except_wasm.json @@ -1,10 +1,10 @@ { - "a.out.js": 18995, - "a.out.js.gz": 7862, + "a.out.js": 19000, + "a.out.js.gz": 7863, "a.out.nodebug.wasm": 147991, "a.out.nodebug.wasm.gz": 55370, - "total": 166986, - "total_gz": 63232, + "total": 166991, + "total_gz": 63233, "sent": [ "_abort_js", "_tzset_js", diff --git a/test/codesize/test_codesize_cxx_except_wasm_legacy.json b/test/codesize/test_codesize_cxx_except_wasm_legacy.json index ff7f4134c2ad4..cb97d37c0f808 100644 --- a/test/codesize/test_codesize_cxx_except_wasm_legacy.json +++ b/test/codesize/test_codesize_cxx_except_wasm_legacy.json @@ -1,9 +1,9 @@ { - "a.out.js": 19069, + "a.out.js": 19074, "a.out.js.gz": 7884, "a.out.nodebug.wasm": 145797, "a.out.nodebug.wasm.gz": 54992, - "total": 164866, + "total": 164871, "total_gz": 62876, "sent": [ "_abort_js", diff --git a/test/codesize/test_codesize_cxx_lto.json b/test/codesize/test_codesize_cxx_lto.json index 6f6b2e32a7dbd..62d07de850976 100644 --- a/test/codesize/test_codesize_cxx_lto.json +++ b/test/codesize/test_codesize_cxx_lto.json @@ -1,10 +1,10 @@ { - "a.out.js": 18532, - "a.out.js.gz": 7634, + "a.out.js": 18538, + "a.out.js.gz": 7635, "a.out.nodebug.wasm": 102168, "a.out.nodebug.wasm.gz": 39572, - "total": 120700, - "total_gz": 47206, + "total": 120706, + "total_gz": 47207, "sent": [ "a (emscripten_resize_heap)", "b (_setitimer_js)", diff --git a/test/codesize/test_codesize_cxx_mangle.json b/test/codesize/test_codesize_cxx_mangle.json index 51ef69417916e..5c23ad70756ea 100644 --- a/test/codesize/test_codesize_cxx_mangle.json +++ b/test/codesize/test_codesize_cxx_mangle.json @@ -1,10 +1,10 @@ { - "a.out.js": 23216, - "a.out.js.gz": 8947, + "a.out.js": 23222, + "a.out.js.gz": 8951, "a.out.nodebug.wasm": 239015, "a.out.nodebug.wasm.gz": 79854, - "total": 262231, - "total_gz": 88801, + "total": 262237, + "total_gz": 88805, "sent": [ "__cxa_begin_catch", "__cxa_end_catch", diff --git a/test/codesize/test_codesize_cxx_noexcept.json b/test/codesize/test_codesize_cxx_noexcept.json index 8e421f324deb9..3d61a03f35854 100644 --- a/test/codesize/test_codesize_cxx_noexcept.json +++ b/test/codesize/test_codesize_cxx_noexcept.json @@ -1,9 +1,9 @@ { - "a.out.js": 19192, + "a.out.js": 19198, "a.out.js.gz": 7944, "a.out.nodebug.wasm": 134666, "a.out.nodebug.wasm.gz": 50806, - "total": 153858, + "total": 153864, "total_gz": 58750, "sent": [ "__cxa_throw", diff --git a/test/codesize/test_codesize_file_preload.expected.js b/test/codesize/test_codesize_file_preload.expected.js index dc412229c2187..e31edf81ddd55 100644 --- a/test/codesize/test_codesize_file_preload.expected.js +++ b/test/codesize/test_codesize_file_preload.expected.js @@ -1304,6 +1304,8 @@ var FS_createDataFile = (...args) => FS.createDataFile(...args); var getUniqueRunDependency = id => id; +var resolveRunDeps = () => new Promise(resolve => dependenciesFulfilled = resolve); + var runDependencies = 0; var dependenciesFulfilled = null; @@ -3177,16 +3179,14 @@ function callMain() { } } -function run() { +async function run() { if (runDependencies > 0) { - dependenciesFulfilled = run; - return; + await resolveRunDeps(); } preRun(); // a preRun added a dependency, run will be called later if (runDependencies > 0) { - dependenciesFulfilled = run; - return; + await resolveRunDeps(); } function doRun() { // run may have just been called through dependencies being fulfilled just in this very frame, diff --git a/test/codesize/test_codesize_file_preload.json b/test/codesize/test_codesize_file_preload.json index d4e588abd444b..5651ce9b1412a 100644 --- a/test/codesize/test_codesize_file_preload.json +++ b/test/codesize/test_codesize_file_preload.json @@ -1,10 +1,10 @@ { - "a.out.js": 22108, - "a.out.js.gz": 9183, + "a.out.js": 22138, + "a.out.js.gz": 9194, "a.out.nodebug.wasm": 1666, "a.out.nodebug.wasm.gz": 945, - "total": 23774, - "total_gz": 10128, + "total": 23804, + "total_gz": 10139, "sent": [ "a (fd_write)" ], diff --git a/test/codesize/test_codesize_files_js_fs.json b/test/codesize/test_codesize_files_js_fs.json index ab61cf55c9fa7..30bd03a070237 100644 --- a/test/codesize/test_codesize_files_js_fs.json +++ b/test/codesize/test_codesize_files_js_fs.json @@ -1,10 +1,10 @@ { - "a.out.js": 17840, - "a.out.js.gz": 7285, + "a.out.js": 17846, + "a.out.js.gz": 7286, "a.out.nodebug.wasm": 381, "a.out.nodebug.wasm.gz": 260, - "total": 18221, - "total_gz": 7545, + "total": 18227, + "total_gz": 7546, "sent": [ "a (fd_write)", "b (fd_read)", diff --git a/test/codesize/test_codesize_hello_dylink.json b/test/codesize/test_codesize_hello_dylink.json index f654bb7291bba..f98e09a213ca2 100644 --- a/test/codesize/test_codesize_hello_dylink.json +++ b/test/codesize/test_codesize_hello_dylink.json @@ -1,10 +1,10 @@ { - "a.out.js": 26265, - "a.out.js.gz": 11182, + "a.out.js": 26271, + "a.out.js.gz": 11181, "a.out.nodebug.wasm": 17861, "a.out.nodebug.wasm.gz": 9019, - "total": 44126, - "total_gz": 20201, + "total": 44132, + "total_gz": 20200, "sent": [ "__syscall_stat64", "emscripten_resize_heap", diff --git a/test/codesize/test_codesize_hello_dylink_all.json b/test/codesize/test_codesize_hello_dylink_all.json index 584a099573a66..2edf7acca41c7 100644 --- a/test/codesize/test_codesize_hello_dylink_all.json +++ b/test/codesize/test_codesize_hello_dylink_all.json @@ -1,7 +1,7 @@ { - "a.out.js": 268274, + "a.out.js": 268334, "a.out.nodebug.wasm": 587640, - "total": 855914, + "total": 855974, "sent": [ "IMG_Init", "IMG_Load",