diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-12-19 03:05:30 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-19 03:05:30 +0800 |
commit | 4b334edf491bd4c43a72e1a08ad2cf360f240515 (patch) | |
tree | a99ae7a0061472c7a8c898e47b6a75bfac6733f4 | |
parent | 8ddcbc39e617a3ce53a340303fd9ef3226ee0065 (diff) | |
download | tracifyjs-4b334edf491bd4c43a72e1a08ad2cf360f240515.tar.gz tracifyjs-4b334edf491bd4c43a72e1a08ad2cf360f240515.zip |
handle global constant collision with local variable after `inline` (#2617)
fixes #2616
-rw-r--r-- | lib/compress.js | 5 | ||||
-rw-r--r-- | test/compress/functions.js | 34 |
2 files changed, 38 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index af1195d4..c51a90c1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4028,13 +4028,16 @@ merge(Compressor.prototype, { expressions.unshift(value || make_node(AST_Undefined, self)); } } else { + var def = name.definition(); scope.var_names()[name.name] = true; + scope.variables.set(name.name, def); + scope.enclosed.push(def); decls.unshift(make_node(AST_VarDef, name, { name: name, value: null })); var sym = make_node(AST_SymbolRef, name, name); - name.definition().references.push(sym); + def.references.push(sym); expressions.unshift(make_node(AST_Assign, self, { operator: "=", left: sym, diff --git a/test/compress/functions.js b/test/compress/functions.js index 23ed22df..c8b7ed6f 100644 --- a/test/compress/functions.js +++ b/test/compress/functions.js @@ -1049,3 +1049,37 @@ unsafe_call_2: { } expect_stdout: true } + +issue_2616: { + options = { + evaluate: true, + inline: true, + reduce_vars: true, + side_effects: true, + unused: true, + } + input: { + var c = "FAIL"; + (function() { + function f() { + function g(NaN) { + (true << NaN) - 0/0 || (c = "PASS"); + } + g([]); + } + f(); + })(); + console.log(c); + } + expect: { + var c = "FAIL"; + (function() { + (function() { + NaN = [], (true << NaN) - 0/0 || (c = "PASS"); + var NaN; + })(); + })(); + console.log(c); + } + expect_stdout: "PASS" +} |