diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-10-12 07:13:17 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-12 14:13:17 +0800 |
commit | b512726cf39066919483d2add87905f677db1832 (patch) | |
tree | 6369b4e358af75e9c17de03107d4503091fc2d64 | |
parent | 9b7a13c8c7f06598b3da8da29da4e8e5680cd24e (diff) | |
download | tracifyjs-b512726cf39066919483d2add87905f677db1832.tar.gz tracifyjs-b512726cf39066919483d2add87905f677db1832.zip |
fix corner case in `collapse_vars` (#4199)
fixes #4197
-rw-r--r-- | lib/compress.js | 8 | ||||
-rw-r--r-- | test/compress/const.js | 29 | ||||
-rw-r--r-- | test/ufuzz/index.js | 2 |
3 files changed, 36 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js index c4012031..fc65e426 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -1599,9 +1599,13 @@ merge(Compressor.prototype, { } if (node instanceof AST_SymbolRef) { if (symbol_in_lvalues(node, parent)) { - return !parent || parent.operator != "=" || parent.left !== node; + return !(parent instanceof AST_Assign && parent.operator == "=" && parent.left === node); } - return side_effects && may_modify(node); + if (side_effects && may_modify(node)) return true; + var def = node.definition(); + return (in_try || def.scope.resolve() !== scope) && !all(def.orig, function(sym) { + return !(sym instanceof AST_SymbolConst); + }); } if (node instanceof AST_This) return symbol_in_lvalues(node, parent); if (node instanceof AST_VarDef) { diff --git a/test/compress/const.js b/test/compress/const.js index 6cd1124a..f2b92247 100644 --- a/test/compress/const.js +++ b/test/compress/const.js @@ -776,3 +776,32 @@ issue_4195: { } expect_stdout: "undefined" } + +issue_4197: { + options = { + collapse_vars: true, + } + input: { + var a = 0; + try { + const b = function() { + a = 1; + b[1]; + }(); + } catch (e) { + console.log(a); + } + } + expect: { + var a = 0; + try { + const b = function() { + a = 1; + b[1]; + }(); + } catch (e) { + console.log(a); + } + } + expect_stdout: "1" +} diff --git a/test/ufuzz/index.js b/test/ufuzz/index.js index 717252d3..3e2d865d 100644 --- a/test/ufuzz/index.js +++ b/test/ufuzz/index.js @@ -1348,7 +1348,7 @@ for (var round = 1; round <= num_iterations; round++) { ok = sandbox.same_stdout(sandbox.run_code(sort_globals(original_code)), sandbox.run_code(sort_globals(uglify_code))); } // ignore numerical imprecision caused by `unsafe_math` - if (!ok && typeof uglify_result == "string" && o.compress && o.compress.unsafe_math) { + if (!ok && o.compress && o.compress.unsafe_math && typeof original_result == "string" && typeof uglify_result == "string") { ok = fuzzy_match(original_result, uglify_result); if (!ok) { var fuzzy_result = sandbox.run_code(original_code.replace(/( - 0\.1){3}/g, " - 0.3"), toplevel); |