diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2020-12-22 23:01:50 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-23 07:01:50 +0800 |
commit | cb4a02949e14a8ffad88c327204f016407218ce9 (patch) | |
tree | edac127ab6f870595e7146f5b17c16f2eca9c870 | |
parent | f85a206b9ed5b39726a2da39680056c09d3f9687 (diff) | |
download | tracifyjs-cb4a02949e14a8ffad88c327204f016407218ce9.tar.gz tracifyjs-cb4a02949e14a8ffad88c327204f016407218ce9.zip |
fix corner case with `NaN` (#4437)
fixes #4436
-rw-r--r-- | lib/compress.js | 28 | ||||
-rw-r--r-- | test/compress/destructured.js | 87 |
2 files changed, 100 insertions, 15 deletions
diff --git a/lib/compress.js b/lib/compress.js index 81fe8866..38342326 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -9297,10 +9297,9 @@ merge(Compressor.prototype, { OPT(AST_Infinity, function(self, compressor) { var lhs = is_lhs(compressor.self(), compressor.parent()); if (lhs && is_atomic(lhs, self)) return self; - if (compressor.option("keep_infinity") - && !(lhs && !is_atomic(lhs, self)) - && !find_scope(compressor).find_variable("Infinity")) + if (compressor.option("keep_infinity") && !lhs && !find_scope(compressor).find_variable("Infinity")) { return self; + } return make_node(AST_Binary, self, { operator: "/", left: make_node(AST_Number, self, { @@ -9314,18 +9313,17 @@ merge(Compressor.prototype, { OPT(AST_NaN, function(self, compressor) { var lhs = is_lhs(compressor.self(), compressor.parent()); - if (lhs && !is_atomic(lhs, self) || find_scope(compressor).find_variable("NaN")) { - return make_node(AST_Binary, self, { - operator: "/", - left: make_node(AST_Number, self, { - value: 0 - }), - right: make_node(AST_Number, self, { - value: 0 - }) - }); - } - return self; + if (lhs && is_atomic(lhs, self)) return self; + if (!lhs && !find_scope(compressor).find_variable("NaN")) return self; + return make_node(AST_Binary, self, { + operator: "/", + left: make_node(AST_Number, self, { + value: 0 + }), + right: make_node(AST_Number, self, { + value: 0 + }) + }); }); function is_reachable(self, defs) { diff --git a/test/compress/destructured.js b/test/compress/destructured.js index d36bbf33..17aa786a 100644 --- a/test/compress/destructured.js +++ b/test/compress/destructured.js @@ -2037,3 +2037,90 @@ issue_4425: { expect_stdout: "PASS" node_version: ">=8" } + +issue_4436_Infinity: { + options = { + unused: true, + } + input: { + console.log(function({ + [delete Infinity]: a, + }) { + var Infinity; + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect: { + console.log(function({ + [delete Infinity]: a, + }) { + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect_stdout: true + node_version: ">=6" +} + +issue_4436_NaN: { + options = { + unused: true, + } + input: { + console.log(function({ + [delete NaN]: a, + }) { + var NaN; + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect: { + console.log(function({ + [delete NaN]: a, + }) { + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect_stdout: true + node_version: ">=6" +} + +issue_4436_undefined: { + options = { + unused: true, + } + input: { + console.log(function({ + [delete undefined]: a, + }) { + var undefined; + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect: { + console.log(function({ + [delete undefined]: a, + }) { + return a; + }({ + true: "FAIL", + false: "PASS", + })); + } + expect_stdout: true + node_version: ">=6" +} |