diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-01-07 07:05:48 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-07 15:05:48 +0800 |
commit | cf1b0165af4a181e8af6365eddbb144ce0d45da3 (patch) | |
tree | 6c3a8613990feef0f84e68bfa42216f734bedc3f | |
parent | c3d358a5b8e00c51ba7a2e9d8c25b7771f5f5a46 (diff) | |
download | tracifyjs-cf1b0165af4a181e8af6365eddbb144ce0d45da3.tar.gz tracifyjs-cf1b0165af4a181e8af6365eddbb144ce0d45da3.zip |
fix corner case in `hoist_vars` (#4518)
fixes #4517
-rw-r--r-- | lib/compress.js | 4 | ||||
-rw-r--r-- | test/compress/hoist_vars.js | 32 |
2 files changed, 34 insertions, 2 deletions
diff --git a/lib/compress.js b/lib/compress.js index 4bc57012..fd0564cb 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -7700,6 +7700,7 @@ merge(Compressor.prototype, { def.references.push(name); } def.eliminated++; + def.single_use = false; return a; }, []); if (assignments.length == 0) return null; @@ -9702,7 +9703,8 @@ merge(Compressor.prototype, { } })); } else { - value = fixed.optimize(compressor).transform(new TreeTransformer(function(node, descend) { + value = fixed.optimize(compressor); + if (value === fixed) value = value.transform(new TreeTransformer(function(node, descend) { if (node instanceof AST_Scope) return node; node = node.clone(); descend(node, this); diff --git a/test/compress/hoist_vars.js b/test/compress/hoist_vars.js index 82f8ede6..020155aa 100644 --- a/test/compress/hoist_vars.js +++ b/test/compress/hoist_vars.js @@ -172,8 +172,38 @@ issue_4489: { A = 0; var o = !0 || null; for (var k in o); + console.log(k); } expect: { - for (var k in !(A = 0)); + !(A = 0); + for (var k in true); + console.log(k); } + expect_stdout: "undefined" +} + +issue_4517: { + options = { + collapse_vars: true, + hoist_vars: true, + join_vars: true, + reduce_vars: true, + unused: true, + } + input: { + console.log(function() { + var a = 2; + A = a; + var b = typeof !1; + return A + b; + }()); + } + expect: { + console.log(function() { + var a = 2; + A = a; + return A + typeof !1; + }()); + } + expect_stdout: "2boolean" } |