diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-02-10 01:13:38 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-10 09:13:38 +0800 |
commit | c76481341ca62e6c651f4bc8db7ed3508423b421 (patch) | |
tree | e61786c06e30ce6b49a2bf28efa7abba80aef5b6 | |
parent | 5e6307974fa2b1e7972ab8c58b636eaed47a54fb (diff) | |
download | tracifyjs-c76481341ca62e6c651f4bc8db7ed3508423b421.tar.gz tracifyjs-c76481341ca62e6c651f4bc8db7ed3508423b421.zip |
fix corner case in `merge_vars` (#4635)
-rw-r--r-- | lib/compress.js | 3 | ||||
-rw-r--r-- | test/compress/yields.js | 56 |
2 files changed, 58 insertions, 1 deletions
diff --git a/lib/compress.js b/lib/compress.js index 3fcfe2d2..b35fc6a5 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -5045,6 +5045,7 @@ merge(Compressor.prototype, { return self; }); + var NO_MERGE = makePredicate("arguments await yield"); AST_Scope.DEFMETHOD("merge_variables", function(compressor) { if (!compressor.option("merge_vars")) return; var self = this, segment = {}, root; @@ -5386,7 +5387,7 @@ merge(Compressor.prototype, { } else if ((ldef = self.variables.get(def.name)) !== def) { if (ldef && root === segment) references[ldef.id] = false; return references[def.id] = false; - } else if (compressor.exposed(def) || sym.name == "arguments" || sym.name == "await") { + } else if (compressor.exposed(def) || NO_MERGE[sym.name]) { return references[def.id] = false; } else { var refs = declarations.get(def.id) || []; diff --git a/test/compress/yields.js b/test/compress/yields.js index 7f85059b..5a6948ed 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -602,6 +602,62 @@ inline_nested_yield: { node_version: ">=4" } +issue_4454_1: { + rename = false + options = { + merge_vars: true, + } + input: { + function f(a) { + (function*(b = console.log(a)) {})(); + var yield = 42..toString(); + console.log(yield); + } + f("PASS"); + } + expect: { + function f(a) { + (function*(b = console.log(a)) {})(); + var yield = 42..toString(); + console.log(yield); + } + f("PASS"); + } + expect_stdout: [ + "PASS", + "42", + ] + node_version: ">=6" +} + +issue_4454_2: { + rename = true + options = { + merge_vars: true, + } + input: { + function f(a) { + (function*(b = console.log(a)) {})(); + var yield = 42..toString(); + console.log(yield); + } + f("PASS"); + } + expect: { + function f(b) { + (function*(c = console.log(b)) {})(); + var b = 42..toString(); + console.log(b); + } + f("PASS"); + } + expect_stdout: [ + "PASS", + "42", + ] + node_version: ">=6" +} + issue_4618: { options = { functions: true, |