diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2021-06-13 13:29:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-13 20:29:14 +0800 |
commit | 6fc7a2ab6a9523a8da1962ba8701bd28f11e417c (patch) | |
tree | 5e290e7ba3a89651004390805e5b8a34926db512 | |
parent | f8b2215145819ed104ba0be0fd5a6f951c91ef8a (diff) | |
download | tracifyjs-6fc7a2ab6a9523a8da1962ba8701bd28f11e417c.tar.gz tracifyjs-6fc7a2ab6a9523a8da1962ba8701bd28f11e417c.zip |
fix corner case in `side_effects` (#5002)
fixes #5001
-rw-r--r-- | lib/compress.js | 21 | ||||
-rw-r--r-- | test/compress/awaits.js | 22 |
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" +} |