From ffb81492073938f6f6368d9a8c438c7db849c9be Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Mon, 9 Jan 2023 17:01:58 +0100 Subject: [PATCH 1/3] Ensure compatibility with Safari for multi-environment ES6 builds Use a different parameter name to prevent the variable from being incorrectly hoisted in JavaScriptCore-based engines (such as Safari). See: https://bugs.webkit.org/show_bug.cgi?id=223533. Regressed for multi-environment ES6 builds since commit ce4c405 (Emscripten 3.1.27). `-sENVIRONMENT=web` is not affected, as that would avoid the emit of this async function altogether. Resolves: #18357. --- emcc.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/emcc.py b/emcc.py index 9533878a93c9b..fb4983d585dd8 100755 --- a/emcc.py +++ b/emcc.py @@ -3767,9 +3767,10 @@ def modularize(): if not settings.EXPORT_READY_PROMISE: return_value = '{}' + # FIXME: https://bugs.webkit.org/show_bug.cgi?id=223533 src = ''' -%(maybe_async)sfunction(%(EXPORT_NAME)s) { - %(EXPORT_NAME)s = %(EXPORT_NAME)s || {}; +%(maybe_async)sfunction(_%(EXPORT_NAME)s) { + %(EXPORT_NAME)s = _%(EXPORT_NAME)s || {}; %(src)s From 0e54be794ca2cb3402be7ba49625f784c83a8061 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Mon, 9 Jan 2023 18:22:20 +0100 Subject: [PATCH 2/3] Incorporate review comment --- emcc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emcc.py b/emcc.py index fb4983d585dd8..612a363b87eca 100755 --- a/emcc.py +++ b/emcc.py @@ -3769,8 +3769,8 @@ def modularize(): # FIXME: https://bugs.webkit.org/show_bug.cgi?id=223533 src = ''' -%(maybe_async)sfunction(_%(EXPORT_NAME)s) { - %(EXPORT_NAME)s = _%(EXPORT_NAME)s || {}; +%(maybe_async)sfunction(config) { + var %(EXPORT_NAME)s = config || {}; %(src)s From 53274f2066a87bb95154d70be062fd890d4cf5a3 Mon Sep 17 00:00:00 2001 From: Kleis Auke Wolthuizen Date: Mon, 9 Jan 2023 18:31:17 +0100 Subject: [PATCH 3/3] Emit a warning when linking with `-sEXPORT_NAME=config` --- emcc.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/emcc.py b/emcc.py index 612a363b87eca..231a0ddffafdf 100755 --- a/emcc.py +++ b/emcc.py @@ -3767,7 +3767,10 @@ def modularize(): if not settings.EXPORT_READY_PROMISE: return_value = '{}' - # FIXME: https://bugs.webkit.org/show_bug.cgi?id=223533 + # TODO: Remove when https://bugs.webkit.org/show_bug.cgi?id=223533 is resolved. + if async_emit != '' and settings.EXPORT_NAME == 'config': + diagnostics.warning('emcc', 'EXPORT_NAME should not be named "config" when targeting Safari') + src = ''' %(maybe_async)sfunction(config) { var %(EXPORT_NAME)s = config || {};