aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2021-06-13 13:29:14 +0100
committerGitHub <noreply@github.com>2021-06-13 20:29:14 +0800
commit6fc7a2ab6a9523a8da1962ba8701bd28f11e417c (patch)
tree5e290e7ba3a89651004390805e5b8a34926db512
parentf8b2215145819ed104ba0be0fd5a6f951c91ef8a (diff)
downloadtracifyjs-6fc7a2ab6a9523a8da1962ba8701bd28f11e417c.tar.gz
tracifyjs-6fc7a2ab6a9523a8da1962ba8701bd28f11e417c.zip
fix corner case in `side_effects` (#5002)
fixes #5001
-rw-r--r--lib/compress.js21
-rw-r--r--test/compress/awaits.js22
2 files changed, 38 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 275d2980..c4aee690 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -7596,11 +7596,22 @@ merge(Compressor.prototype, {
node.body = body;
}
} else if (body instanceof AST_Sequence) {
- var tail = body.tail_node();
- if (tail instanceof AST_Await && is_primitive(compressor, tail.expression)) {
- tail = tail.expression.drop_side_effect_free(compressor);
- body.expressions.pop();
- if (tail) body.expressions.push(tail);
+ var exprs = body.expressions;
+ for (var i = exprs.length; --i >= 0;) {
+ var tail = exprs[i];
+ if (!(tail instanceof AST_Await)) break;
+ if (!is_primitive(compressor, tail.expression)) break;
+ if (exprs[i] = tail.expression.drop_side_effect_free(compressor)) break;
+ }
+ switch (i) {
+ case -1:
+ return make_node(AST_EmptyStatement, node);
+ case 0:
+ node.body = exprs[0];
+ break;
+ default:
+ exprs.length = i + 1;
+ break;
}
}
return node;
diff --git a/test/compress/awaits.js b/test/compress/awaits.js
index 28558bd2..f27fb599 100644
--- a/test/compress/awaits.js
+++ b/test/compress/awaits.js
@@ -1758,3 +1758,25 @@ issue_4987: {
]
node_version: ">=8"
}
+
+issue_5001: {
+ options = {
+ awaits: true,
+ inline: true,
+ side_effects: true,
+ }
+ input: {
+ var a = 0;
+ (async function() {
+ a++ | await 42;
+ })();
+ console.log(a ? "PASS" : "FAIL");
+ }
+ expect: {
+ var a = 0;
+ void a++;
+ console.log(a ? "PASS" : "FAIL");
+ }
+ expect_stdout: "PASS"
+ node_version: ">=8"
+}