aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-06-21 15:28:54 +0100
committerGitHub <noreply@github.com>2021-06-21 22:28:54 +0800
commite9c902b0449a291469ddaee04dc745cf4706560d (patch)
treef23fc00bb9d414a62f8c6b23f18e93ad1a265b3b
parent111366fca0352df45459ee8dc3fa6d8dcc337d92 (diff)
downloadtracifyjs-e9c902b0449a291469ddaee04dc745cf4706560d.tar.gz
tracifyjs-e9c902b0449a291469ddaee04dc745cf4706560d.zip
fix corner cases in `dead_code` & `inline` (#5020)
fixes #5019
-rw-r--r--lib/compress.js8
-rw-r--r--test/compress/awaits.js89
-rw-r--r--test/compress/yields.js59
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"
+}