diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-06-21 15:28:54 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-21 22:28:54 +0800 |
commit | e9c902b0449a291469ddaee04dc745cf4706560d (patch) | |
tree | f23fc00bb9d414a62f8c6b23f18e93ad1a265b3b | |
parent | 111366fca0352df45459ee8dc3fa6d8dcc337d92 (diff) | |
download | tracifyjs-e9c902b0449a291469ddaee04dc745cf4706560d.tar.gz tracifyjs-e9c902b0449a291469ddaee04dc745cf4706560d.zip |
fix corner cases in `dead_code` & `inline` (#5020)
fixes #5019
-rw-r--r-- | lib/compress.js | 8 | ||||
-rw-r--r-- | test/compress/awaits.js | 89 | ||||
-rw-r--r-- | test/compress/yields.js | 59 |
3 files changed, 153 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js index e4988947..52979c92 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -11091,9 +11091,11 @@ merge(Compressor.prototype, { }); var scan_scope = new TreeWalker(function(node) { if (reachable) return true; - if (node instanceof AST_Scope && node !== self) { - var parent = scan_scope.parent(); - if (parent instanceof AST_Call && parent.expression === node) return; + if (node instanceof AST_Lambda && node !== self) { + if (!(is_async(node) || is_generator(node))) { + var parent = scan_scope.parent(); + if (parent instanceof AST_Call && parent.expression === node) return; + } node.walk(find_ref); return true; } diff --git a/test/compress/awaits.js b/test/compress/awaits.js index f27fb599..9b4d8ba7 100644 --- a/test/compress/awaits.js +++ b/test/compress/awaits.js @@ -1780,3 +1780,92 @@ issue_5001: { expect_stdout: "PASS" node_version: ">=8" } + +issue_5019_1: { + options = { + dead_code: true, + } + input: { + (function(a) { + (async function() { + await 42; + console.log(a); + })(); + a = "PASS"; + })("FAIL"); + } + expect: { + (function(a) { + (async function() { + await 42; + console.log(a); + })(); + a = "PASS"; + })("FAIL"); + } + expect_stdout: "PASS" + node_version: ">=8" +} + +issue_5019_2: { + options = { + dead_code: true, + } + input: { + console.log("sync", function(a) { + (async function() { + console.log(await "async", a); + })(); + return a = "PASS"; + }("FAIL")); + } + expect: { + console.log("sync", function(a) { + (async function() { + console.log(await "async", a); + })(); + return a = "PASS"; + }("FAIL")); + } + expect_stdout: [ + "sync PASS", + "async PASS", + ] + node_version: ">=8" +} + +issue_5019_3: { + options = { + inline: true, + toplevel: true, + } + input: { + for (var i in "foo") { + (function(a) { + (async function() { + console.log(await "async", a); + })(); + })(i); + console.log("sync", i); + } + } + expect: { + for (var i in "foo") { + (function(a) { + (async function() { + console.log(await "async", a); + })(); + })(i); + console.log("sync", i); + } + } + expect_stdout: [ + "sync 0", + "sync 1", + "sync 2", + "async 0", + "async 1", + "async 2", + ] + node_version: ">=8" +} diff --git a/test/compress/yields.js b/test/compress/yields.js index d577d7ef..2e0816e5 100644 --- a/test/compress/yields.js +++ b/test/compress/yields.js @@ -1083,3 +1083,62 @@ issue_4769_2: { expect_stdout: "PASS" node_version: ">=6" } + +issue_5019_1: { + options = { + dead_code: true, + } + input: { + (function(a) { + return a = function*() { + console.log(typeof a); + }(); + })().next(); + } + expect: { + (function(a) { + return a = function*() { + console.log(typeof a); + }(); + })().next(); + } + expect_stdout: "object" + node_version: ">=4" +} + +issue_5019_2: { + options = { + inline: true, + toplevel: true, + } + input: { + var a = []; + for (var b in "foo") + a.push(function(c) { + return function*() { + console.log(c); + }(); + }(b)); + a.map(function(d) { + return d.next(); + }); + } + expect: { + var a = []; + for (var b in "foo") + a.push(function(c) { + return function*() { + console.log(c); + }(); + }(b)); + a.map(function(d) { + return d.next(); + }); + } + expect_stdout: [ + "0", + "1", + "2", + ] + node_version: ">=4" +} |