Skip to content

Commit be89742

Browse files
authored
Fix OOM running acorn optimizer on binaryen_js (#24559)
See #24558
1 parent 6516397 commit be89742

File tree

4 files changed

+19
-9
lines changed

4 files changed

+19
-9
lines changed

src/modularize.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ var {{{ EXPORT_NAME }}} = (() => {
2222
return {{{ asyncIf(WASM_ASYNC_COMPILATION || (EXPORT_ES6 && ENVIRONMENT_MAY_BE_NODE)) }}}function(moduleArg = {}) {
2323
var moduleRtn;
2424

25-
<<< INNER_JS_CODE >>>
25+
"<<< INNER_JS_CODE >>>"
2626

2727
return moduleRtn;
2828
};
@@ -33,7 +33,7 @@ var {{{ EXPORT_NAME }}} = (() => {
3333
{{{ asyncIf(WASM_ASYNC_COMPILATION || (EXPORT_ES6 && ENVIRONMENT_MAY_BE_NODE)) }}}function {{{ EXPORT_NAME }}}(moduleArg = {}) {
3434
var moduleRtn;
3535

36-
<<< INNER_JS_CODE >>>
36+
"<<< INNER_JS_CODE >>>"
3737

3838
return moduleRtn;
3939
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1234
1+
1249
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2551
1+
2566

tools/link.py

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,15 +2442,25 @@ def phase_binaryen(target, options, wasm_target):
24422442
def modularize():
24432443
global final_js
24442444
logger.debug(f'Modularizing, creating factory function called `{settings.EXPORT_NAME}`')
2445-
src = building.read_and_preprocess(utils.path_from_root('src/modularize.js'), expand_macros=True)
2446-
src = do_replace(src, '<<< INNER_JS_CODE >>>', read_file(final_js))
2445+
modularize_src = building.read_and_preprocess(utils.path_from_root('src/modularize.js'), expand_macros=True)
2446+
if settings.MINIFY_WHITESPACE:
2447+
with shared.get_temp_files().get_file(suffix='.js') as tmp:
2448+
write_file(tmp, modularize_src)
2449+
minified_file = building.acorn_optimizer(tmp, ['--minify-whitespace'])
2450+
modularize_src = read_file(minified_file)
2451+
2452+
# Replace INNER_JS_CODE in the minified code
2453+
full_src = do_replace(modularize_src, '"<<< INNER_JS_CODE >>>"', read_file(final_js))
24472454
final_js += '.modular.js'
2448-
write_file(final_js, src)
2455+
write_file(final_js, full_src)
24492456
shared.get_temp_files().note(final_js)
24502457
save_intermediate('modularized')
24512458

2452-
if settings.MINIFY_WHITESPACE:
2453-
final_js = building.acorn_optimizer(final_js, ['--minify-whitespace'])
2459+
# FIXME(https://github.com/emscripten-core/emscripten/issues/24558): Running acorn at this
2460+
# late phase seems to cause OOM (some kind of inifite loop perhaps) in node.
2461+
# Instead we minify src/modularize.js in isolation above.
2462+
#if settings.MINIFY_WHITESPACE:
2463+
# final_js = building.acorn_optimizer(final_js, ['--minify-whitespace'])
24542464

24552465

24562466
def module_export_name_substitution():

0 commit comments

Comments
 (0)