diff --git a/tests/optimizer/eliminateDeadGlobals-output.js b/tests/optimizer/eliminateDeadGlobals-output.js deleted file mode 100644 index 49aaad40ee0ec..0000000000000 --- a/tests/optimizer/eliminateDeadGlobals-output.js +++ /dev/null @@ -1,195 +0,0 @@ -var Module = {}; -Module["asm"] = (function(global, env, buffer) { - "use asm"; - var HEAP8 = new global.Int8Array(buffer); - var HEAP16 = new global.Int16Array(buffer); - var HEAP32 = new global.Int32Array(buffer); - var HEAPU8 = new global.Uint8Array(buffer); - var HEAPU16 = new global.Uint16Array(buffer); - var HEAPU32 = new global.Uint32Array(buffer); - var HEAPF32 = new global.Float32Array(buffer); - var HEAPF64 = new global.Float64Array(buffer); - var STACKTOP = env.STACKTOP | 0; - var _atoi = env._atoi; - var _strlen = env._strlen; - var __Znam = env.__Znam; - var _puts = env._puts; - var _memcpy = env._memcpy; - var __ZdaPv = env.__ZdaPv; - var __ZdlPv = env.__ZdlPv; - function _emscripten_replace_memory(newBuffer) { - if (byteLength(newBuffer) & 16777215 || byteLength(newBuffer) <= 16777215 || byteLength(newBuffer) > 2147483648) return false; - HEAP8 = new Int8View(newBuffer); - HEAP16 = new Int16View(newBuffer); - HEAP32 = new Int32View(newBuffer); - HEAPU8 = new Uint8View(newBuffer); - HEAPU16 = new Uint16View(newBuffer); - HEAPU32 = new Uint32View(newBuffer); - HEAPF32 = new Float32View(newBuffer); - HEAPF64 = new Float64View(newBuffer); - buffer = newBuffer; - return true; - } - function _main(i1, i2) { - i1 = i1 | 0; - i2 = i2 | 0; - var d3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0; - i12 = STACKTOP; - STACKTOP = STACKTOP + 4240 | 0; - i9 = i12 + 2120 | 0; - i11 = i12; - if ((i1 | 0) > 1) i10 = _atoi(HEAP32[i2 + 4 >> 2] | 0) | 0; else i10 = 512; - i8 = __Znam(347) | 0; - _memcpy(i8 | 0, 520, 287) | 0; - i1 = i8 + 287 | 0; - i2 = 520; - i4 = i1 + 60 | 0; - do { - HEAP8[i1 >> 0] = HEAP8[i2 >> 0] | 0; - i1 = i1 + 1 | 0; - i2 = i2 + 1 | 0; - } while ((i1 | 0) < (i4 | 0)); - i1 = i10 << 1; - if (i1) { - i2 = 0; - while (1) { - i7 = i1 >>> 0 < 60 ? i1 : 60; - i4 = __Znam(i7 + 2 | 0) | 0; - _memcpy(i4 | 0, i8 + i2 | 0, i7 | 0) | 0; - HEAP8[i4 + i7 >> 0] = 0; - i5 = _strlen(i4 | 0) | 0; - i6 = HEAP32[128] | 0; - if ((i5 | 0) > (i6 | 0)) { - if ((i6 | 0) > 0) { - HEAP8[i4 + i6 >> 0] = 0; - _puts(i4 | 0) | 0; - HEAP32[128] = 0; - } - } else { - _puts(i4 | 0) | 0; - HEAP32[128] = (HEAP32[128] | 0) - i5; - } - __ZdlPv(i4 | 0); - i2 = i7 + i2 | 0; - if ((i1 | 0) == (i7 | 0)) break; else { - i1 = i1 - i7 | 0; - i2 = i2 >>> 0 > 287 ? i2 + -287 | 0 : i2; - } - } - } - __ZdaPv(i8 | 0); - if (!(HEAP32[2] | 0)) { - i1 = 8; - i2 = 0; - } else { - i1 = 8; - d3 = 0; - do { - i8 = i1 + 8 | 0; - d3 = d3 + +HEAPF64[i8 >> 3]; - d13 = d3 < 1 ? d3 : 1; - HEAPF64[i8 >> 3] = d13; - HEAP32[i1 + 16 >> 2] = ~~(d13 * 512) >>> 0; - i1 = i1 + 24 | 0; - } while ((HEAP32[i1 >> 2] | 0) != 0); - i1 = 8; - i2 = 0; - } - do { - while (1) { - i8 = HEAP32[i1 + 16 >> 2] | 0; - if (i2 >>> 0 > i8 >>> 0 & (i8 | 0) != 0) i1 = i1 + 24 | 0; else break; - } - HEAP32[i9 + (i2 << 2) >> 2] = i1; - i2 = i2 + 1 | 0; - } while ((i2 | 0) != 513); - HEAP32[i9 + 2116 >> 2] = 0; - i1 = i10 * 3 | 0; - if (i1) while (1) { - i2 = i1 >>> 0 < 60 ? i1 : 60; - __ZN10Randomized9writelineEj(i9, i2); - if ((i1 | 0) == (i2 | 0)) break; else i1 = i1 - i2 | 0; - } - if (!(HEAP32[98] | 0)) { - i1 = 392; - i2 = 0; - } else { - i1 = 392; - d3 = 0; - do { - i9 = i1 + 8 | 0; - d3 = d3 + +HEAPF64[i9 >> 3]; - d13 = d3 < 1 ? d3 : 1; - HEAPF64[i9 >> 3] = d13; - HEAP32[i1 + 16 >> 2] = ~~(d13 * 512) >>> 0; - i1 = i1 + 24 | 0; - } while ((HEAP32[i1 >> 2] | 0) != 0); - i1 = 392; - i2 = 0; - } - do { - while (1) { - i9 = HEAP32[i1 + 16 >> 2] | 0; - if (i2 >>> 0 > i9 >>> 0 & (i9 | 0) != 0) i1 = i1 + 24 | 0; else break; - } - HEAP32[i11 + (i2 << 2) >> 2] = i1; - i2 = i2 + 1 | 0; - } while ((i2 | 0) != 513); - HEAP32[i11 + 2116 >> 2] = 0; - i1 = i10 * 5 | 0; - if (!i1) { - STACKTOP = i12; - return 0; - } - while (1) { - i2 = i1 >>> 0 < 60 ? i1 : 60; - __ZN10Randomized9writelineEj(i11, i2); - if ((i1 | 0) == (i2 | 0)) break; else i1 = i1 - i2 | 0; - } - STACKTOP = i12; - return 0; - } - function __ZN10Randomized9writelineEj(i5, i2) { - i5 = i5 | 0; - i2 = i2 | 0; - var i1 = 0, i3 = 0, d4 = 0, d6 = 0; - if (i2) { - i3 = 0; - do { - i1 = ((((HEAP32[129] | 0) * 3877 | 0) + 29573 | 0) >>> 0) % 139968 | 0; - HEAP32[129] = i1; - d6 = +(i1 >>> 0) / 139968; - d4 = d6; - i1 = HEAP32[i5 + (~~(d6 * 512) >>> 0 << 2) >> 2] | 0; - while (1) if (+HEAPF64[i1 + 8 >> 3] < d4) i1 = i1 + 24 | 0; else break; - HEAP8[i5 + 2052 + i3 >> 0] = HEAP32[i1 >> 2]; - i3 = i3 + 1 | 0; - } while ((i3 | 0) != (i2 | 0)); - } - HEAP8[i5 + 2052 + i2 >> 0] = 10; - i1 = i2 + 1 | 0; - HEAP8[i5 + 2052 + i1 >> 0] = 0; - HEAP32[i5 + 2116 >> 2] = i1; - i1 = i5 + 2052 | 0; - i2 = _strlen(i1 | 0) | 0; - i3 = HEAP32[128] | 0; - if ((i2 | 0) <= (i3 | 0)) { - _puts(i1 | 0) | 0; - HEAP32[128] = (HEAP32[128] | 0) - i2; - return; - } - if ((i3 | 0) <= 0) return; - HEAP8[i5 + 2052 + i3 >> 0] = 0; - _puts(i1 | 0) | 0; - HEAP8[(HEAP32[128] | 0) + (i5 + 2052) >> 0] = 122; - HEAP32[128] = 0; - return; - } - return { - _main: _main, - _emscripten_replace_memory: _emscripten_replace_memory - }; -}); - - - diff --git a/tests/optimizer/eliminateDeadGlobals.js b/tests/optimizer/eliminateDeadGlobals.js deleted file mode 100644 index b7350b7d19fb4..0000000000000 --- a/tests/optimizer/eliminateDeadGlobals.js +++ /dev/null @@ -1,245 +0,0 @@ -var Module = {}; -Module["asm"] = (function(global,env,buffer) { - - 'use asm'; - - - var HEAP8 = new global.Int8Array(buffer); - var HEAP16 = new global.Int16Array(buffer); - var HEAP32 = new global.Int32Array(buffer); - var HEAPU8 = new global.Uint8Array(buffer); - var HEAPU16 = new global.Uint16Array(buffer); - var HEAPU32 = new global.Uint32Array(buffer); - var HEAPF32 = new global.Float32Array(buffer); - var HEAPF64 = new global.Float64Array(buffer); - - - var STACKTOP=env.STACKTOP|0; - var STACK_MAX=env.STACK_MAX|0; - var tempDoublePtr=env.tempDoublePtr|0; - var ABORT=env.ABORT|0; - - var __THREW__ = 0; - var threwValue = 0; - var setjmpId = 0; - var undef = 0; - var nan = global.NaN, inf = global.Infinity; - var tempInt = 0, tempBigInt = 0, tempBigIntP = 0, tempBigIntS = 0, tempBigIntR = 0.0, tempBigIntI = 0, tempBigIntD = 0, tempValue = 0, tempDouble = 0.0; - - var tempRet0 = 0; - var tempRet1 = 0; - var tempRet2 = 0; - var tempRet3 = 0; - var tempRet4 = 0; - var tempRet5 = 0; - var tempRet6 = 0; - var tempRet7 = 0; - var tempRet8 = 0; - var tempRet9 = 0; - var Math_floor=global.Math.floor; - var Math_abs=global.Math.abs; - var Math_sqrt=global.Math.sqrt; - var Math_pow=global.Math.pow; - var Math_cos=global.Math.cos; - var Math_sin=global.Math.sin; - var Math_tan=global.Math.tan; - var Math_acos=global.Math.acos; - var Math_asin=global.Math.asin; - var Math_atan=global.Math.atan; - var Math_atan2=global.Math.atan2; - var Math_exp=global.Math.exp; - var Math_log=global.Math.log; - var Math_ceil=global.Math.ceil; - var Math_imul=global.Math.imul; - var Math_min=global.Math.min; - var Math_clz32=global.Math.clz32; - var abort=env.abort; - var assert=env.assert; - var _atoi=env._atoi; - var _strlen=env._strlen; - var __Znam=env.__Znam; - var _puts=env._puts; - var _memcpy=env._memcpy; - var ___gxx_personality_v0=env.___gxx_personality_v0; - var __ZdaPv=env.__ZdaPv; - var __ZdlPv=env.__ZdlPv; - var tempFloat = 0.0; - - function _emscripten_replace_memory(newBuffer) { - if (byteLength(newBuffer) & 16777215 || byteLength(newBuffer) <= 16777215 || byteLength(newBuffer) > 2147483648) return false; - HEAP8 = new Int8View(newBuffer); - HEAP16 = new Int16View(newBuffer); - HEAP32 = new Int32View(newBuffer); - HEAPU8 = new Uint8View(newBuffer); - HEAPU16 = new Uint16View(newBuffer); - HEAPU32 = new Uint32View(newBuffer); - HEAPF32 = new Float32View(newBuffer); - HEAPF64 = new Float64View(newBuffer); - buffer = newBuffer; - return true; - } - -// EMSCRIPTEN_START_FUNCS -function _main(i1, i2) { - i1 = i1 | 0; - i2 = i2 | 0; - var d3 = 0.0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0, i10 = 0, i11 = 0, i12 = 0, d13 = 0.0; - i12 = STACKTOP; - STACKTOP = STACKTOP + 4240 | 0; - i9 = i12 + 2120 | 0; - i11 = i12; - if ((i1 | 0) > 1) i10 = _atoi(HEAP32[i2 + 4 >> 2] | 0) | 0; else i10 = 512; - i8 = __Znam(347) | 0; - _memcpy(i8 | 0, 520, 287) | 0; - i1 = i8 + 287 | 0; - i2 = 520; - i4 = i1 + 60 | 0; - do { - HEAP8[i1 >> 0] = HEAP8[i2 >> 0] | 0; - i1 = i1 + 1 | 0; - i2 = i2 + 1 | 0; - } while ((i1 | 0) < (i4 | 0)); - i1 = i10 << 1; - if (i1) { - i2 = 0; - while (1) { - i7 = i1 >>> 0 < 60 ? i1 : 60; - i4 = __Znam(i7 + 2 | 0) | 0; - _memcpy(i4 | 0, i8 + i2 | 0, i7 | 0) | 0; - HEAP8[i4 + i7 >> 0] = 0; - i5 = _strlen(i4 | 0) | 0; - i6 = HEAP32[128] | 0; - if ((i5 | 0) > (i6 | 0)) { - if ((i6 | 0) > 0) { - HEAP8[i4 + i6 >> 0] = 0; - _puts(i4 | 0) | 0; - HEAP32[128] = 0; - } - } else { - _puts(i4 | 0) | 0; - HEAP32[128] = (HEAP32[128] | 0) - i5; - } - __ZdlPv(i4 | 0); - i2 = i7 + i2 | 0; - if ((i1 | 0) == (i7 | 0)) break; else { - i1 = i1 - i7 | 0; - i2 = i2 >>> 0 > 287 ? i2 + -287 | 0 : i2; - } - } - } - __ZdaPv(i8 | 0); - if (!(HEAP32[2] | 0)) { - i1 = 8; - i2 = 0; - } else { - i1 = 8; - d3 = 0.0; - do { - i8 = i1 + 8 | 0; - d3 = d3 + +HEAPF64[i8 >> 3]; - d13 = d3 < 1.0 ? d3 : 1.0; - HEAPF64[i8 >> 3] = d13; - HEAP32[i1 + 16 >> 2] = ~~(d13 * 512.0) >>> 0; - i1 = i1 + 24 | 0; - } while ((HEAP32[i1 >> 2] | 0) != 0); - i1 = 8; - i2 = 0; - } - do { - while (1) { - i8 = HEAP32[i1 + 16 >> 2] | 0; - if (i2 >>> 0 > i8 >>> 0 & (i8 | 0) != 0) i1 = i1 + 24 | 0; else break; - } - HEAP32[i9 + (i2 << 2) >> 2] = i1; - i2 = i2 + 1 | 0; - } while ((i2 | 0) != 513); - HEAP32[i9 + 2116 >> 2] = 0; - i1 = i10 * 3 | 0; - if (i1) while (1) { - i2 = i1 >>> 0 < 60 ? i1 : 60; - __ZN10Randomized9writelineEj(i9, i2); - if ((i1 | 0) == (i2 | 0)) break; else i1 = i1 - i2 | 0; - } - if (!(HEAP32[98] | 0)) { - i1 = 392; - i2 = 0; - } else { - i1 = 392; - d3 = 0.0; - do { - i9 = i1 + 8 | 0; - d3 = d3 + +HEAPF64[i9 >> 3]; - d13 = d3 < 1.0 ? d3 : 1.0; - HEAPF64[i9 >> 3] = d13; - HEAP32[i1 + 16 >> 2] = ~~(d13 * 512.0) >>> 0; - i1 = i1 + 24 | 0; - } while ((HEAP32[i1 >> 2] | 0) != 0); - i1 = 392; - i2 = 0; - } - do { - while (1) { - i9 = HEAP32[i1 + 16 >> 2] | 0; - if (i2 >>> 0 > i9 >>> 0 & (i9 | 0) != 0) i1 = i1 + 24 | 0; else break; - } - HEAP32[i11 + (i2 << 2) >> 2] = i1; - i2 = i2 + 1 | 0; - } while ((i2 | 0) != 513); - HEAP32[i11 + 2116 >> 2] = 0; - i1 = i10 * 5 | 0; - if (!i1) { - STACKTOP = i12; - return 0; - } - while (1) { - i2 = i1 >>> 0 < 60 ? i1 : 60; - __ZN10Randomized9writelineEj(i11, i2); - if ((i1 | 0) == (i2 | 0)) break; else i1 = i1 - i2 | 0; - } - STACKTOP = i12; - return 0; -} - -function __ZN10Randomized9writelineEj(i5, i2) { - i5 = i5 | 0; - i2 = i2 | 0; - var i1 = 0, i3 = 0, d4 = 0.0, d6 = 0.0; - if (i2) { - i3 = 0; - do { - i1 = ((((HEAP32[129] | 0) * 3877 | 0) + 29573 | 0) >>> 0) % 139968 | 0; - HEAP32[129] = i1; - d6 = +(i1 >>> 0) / 139968.0; - d4 = d6; - i1 = HEAP32[i5 + (~~(d6 * 512.0) >>> 0 << 2) >> 2] | 0; - while (1) if (+HEAPF64[i1 + 8 >> 3] < d4) i1 = i1 + 24 | 0; else break; - HEAP8[i5 + 2052 + i3 >> 0] = HEAP32[i1 >> 2]; - i3 = i3 + 1 | 0; - } while ((i3 | 0) != (i2 | 0)); - } - HEAP8[i5 + 2052 + i2 >> 0] = 10; - i1 = i2 + 1 | 0; - HEAP8[i5 + 2052 + i1 >> 0] = 0; - HEAP32[i5 + 2116 >> 2] = i1; - i1 = i5 + 2052 | 0; - i2 = _strlen(i1 | 0) | 0; - i3 = HEAP32[128] | 0; - if ((i2 | 0) <= (i3 | 0)) { - _puts(i1 | 0) | 0; - HEAP32[128] = (HEAP32[128] | 0) - i2; - return; - } - if ((i3 | 0) <= 0) return; - HEAP8[i5 + 2052 + i3 >> 0] = 0; - _puts(i1 | 0) | 0; - HEAP8[(HEAP32[128] | 0) + (i5 + 2052) >> 0] = 122; - HEAP32[128] = 0; - return; -} - -// EMSCRIPTEN_END_FUNCS - - - return { _main: _main, _emscripten_replace_memory: _emscripten_replace_memory }; -}) -; diff --git a/tests/test_other.py b/tests/test_other.py index 541a84a9ad6ac..51248d9b5359e 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -40,8 +40,6 @@ import jsrun import clang_native import tools.line_endings -import tools.js_optimizer -import tools.tempfiles scons_path = shared.which('scons') emmake = shared.bat_suffix(path_from_root('emmake')) @@ -1775,8 +1773,6 @@ def test_extern_prepost(self): def test_js_optimizer(self): ACORN_PASSES = ['JSDCE', 'AJSDCE', 'applyImportAndExportNameChanges', 'emitDCEGraph', 'applyDCEGraphRemovals', 'growableHeap', 'unsignPointers', 'asanify'] for input, expected, passes in [ - (path_from_root('tests', 'optimizer', 'eliminateDeadGlobals.js'), open(path_from_root('tests', 'optimizer', 'eliminateDeadGlobals-output.js')).read(), - ['eliminateDeadGlobals']), (path_from_root('tests', 'optimizer', 'test-js-optimizer.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-output.js')).read(), ['hoistMultiples', 'removeAssignsToUndefined', 'simplifyExpressions']), (path_from_root('tests', 'optimizer', 'test-js-optimizer-asm.js'), open(path_from_root('tests', 'optimizer', 'test-js-optimizer-asm-output.js')).read(), diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js index c2f2d62a84bf0..da5160e62d6d3 100755 --- a/tools/js-optimizer.js +++ b/tools/js-optimizer.js @@ -5019,22 +5019,6 @@ function findUninitializedVars(func, asmData) { return bad; } -function trample(x, y) { // x = y, by trampling it - for (var i = 0; i < y.length; i++) { - x[i] = y[i]; - } - x.length = y.length; -} - -function ilog2(x) { - x = Math.round(x); - if (x === 1) return 0; - if (x === 2) return 1; - if (x === 4) return 2; - if (x === 8) return 3; - throw 'ilog2 is not smart enough for ' + x; -} - // emits which functions are directly reachable, except for some that are // ignored function findReachable(ast) { @@ -5073,7 +5057,8 @@ function dumpCallGraph(ast) { // Last pass utilities -// Change +5 to DOT$ZERO(5). We then textually change 5 to 5.0 (uglify's ast cannot differentiate between 5 and 5.0 directly) +// Change +5 to DOT$ZERO(5). We then textually change 5 to 5.0 (uglify's ast +// cannot differentiate between 5 and 5.0 directly) function prepDotZero(ast) { traverse(ast, function(node, type) { if (type === 'unary-prefix' && node[1] === '+') { @@ -5084,6 +5069,7 @@ function prepDotZero(ast) { } }); } + function fixDotZero(js) { return js.replace(/-DOT\$ZERO\(-/g, '- DOT$ZERO(-') // avoid x - (-y.0) turning into x--y.0 when minified .replace(/DOT\$ZERO\(([-+]?(0x)?[0-9a-f]*\.?[0-9]*([eE][-+]?[0-9]+)?)\)/g, function(m, num) { @@ -5198,125 +5184,6 @@ function asmLastOpts(ast) { }); } -// Cleans up globals in an asm.js module that are not used. Assumes it -// receives a full asm.js module, as from the side file in --separate-asm -function eliminateDeadGlobals(ast) { - traverse(ast, function(func, type) { - if (type !== 'function') return; - // find all symbols used by name that are not locals, so they must be globals - var stats = func[3]; - var used = {}; - for (var i = 0; i < stats.length; i++) { - var asmFunc = stats[i]; - if (asmFunc[0] === 'defun') { - // the memory growth function does not contain valid asm.js, and can be ignored - var isAsmJS = asmFunc[1] !== '_emscripten_replace_memory'; - if (isAsmJS) { - var asmData = normalizeAsm(asmFunc); - } - traverse(asmFunc, function(node, type) { - if (type == 'name') { - var name = node[1]; - if (!isAsmJS || !(name in asmData.params || name in asmData.vars)) { - used[name] = 1; - } - } - }); - if (isAsmJS) { - denormalizeAsm(asmFunc, asmData); - } - } else { - traverse(asmFunc, function(node, type) { - if (type == 'name') { - var name = node[1]; - used[name] = 1; - } - }); - } - } - for (var i = 0; i < stats.length; i++) { - var node = stats[i]; - if (node[0] === 'var') { - for (var j = 0; j < node[1].length; j++) { - var v = node[1][j]; - var name = v[0]; - var value = v[1]; - if (!(name in used)) { - node[1].splice(j, 1); - j--; - if (node[1].length == 0) { - // remove the whole var - stats[i] = emptyNode(); - } - } - } - } else if (node[0] === 'defun') { - if (!(node[1] in used)) { - stats[i] = emptyNode(); - } - } - } - removeEmptySubNodes(func); - }); -} - -function isAsmLibraryArgAssign(node) { - return node[0] === 'var' && node[1][0] && node[1][0][0] == 'asmLibraryArg'; -} - -function asmLibraryArgs(node) { - return node[1][0][1]; -} - -function isAsmUse(node) { - return node[0] === 'sub' && - ((node[1][0] === 'name' && node[1][1] === 'asm') || // asm['X'] - (node[1][0] === 'sub' && node[1][1][0] === 'name' && node[1][1][1] === 'Module' && node[1][2][0] === 'string' && node[1][2][1] === 'asm')) && // Module - node[2][0] === 'string'; -} - -function getAsmUseName(node) { - return node[2][1]; -} - -function isModuleUse(node) { - return node[0] === 'sub' && - node[1][0] === 'name' && node[1][1] === 'Module' && // Module['X'] - node[2][0] === 'string'; -} - -function getModuleUseName(node) { - return node[2][1]; -} - -function isModuleAsmUse(node) { // Module["asm"][..string..] - return node[0] === 'sub' && - node[1][0] === 'sub' && node[1][1][0] === 'name' && node[1][1][1] === 'Module' && node[1][2][0] === 'string' && node[1][2][1] === 'asm' && - node[2][0] === 'string'; -} - -// A static dyncall is dynCall('vii', ..), which is actually static even -// though we call dynCall() - we see the string signature statically. -function isStaticDynCall(node) { - return node[0] === 'call' && node[1][0] === 'name' && node[1][1] === 'dynCall' && node[2][0][0] === 'string'; -} - -function getStaticDynCallName(node) { - return 'dynCall_' + node[2][0][1]; -} - -// a dynamic dyncall is one in which all we know is *some* dynCall may -// be called, but not who. This can be either -// dynCall(*not a string*, ..) -// or, to be conservative, -// "dynCall_" -// as that prefix means we may be constructing a dynamic dyncall name -// (dynCall and embind's requireFunction do this internally). -function isDynamicDynCall(node) { - return (node[0] === 'call' && node[1][0] === 'name' && node[1][1] === 'dynCall' && node[2][0][0] !== 'string') || - (node[0] === 'string' && node[1] === 'dynCall_'); -} - function removeFuncs(ast) { assert(ast[0] === 'toplevel'); var keep = set(extraInfo.keep); @@ -5346,7 +5213,6 @@ var passes = { loopOptimizer: loopOptimizer, registerize: registerize, registerizeHarder: registerizeHarder, - eliminateDeadGlobals: eliminateDeadGlobals, eliminate: eliminate, eliminateMemSafe: eliminateMemSafe, minifyGlobals: minifyGlobals,