aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2020-12-22 23:01:50 +0000
committerGitHub <noreply@github.com>2020-12-23 07:01:50 +0800
commitcb4a02949e14a8ffad88c327204f016407218ce9 (patch)
treeedac127ab6f870595e7146f5b17c16f2eca9c870
parentf85a206b9ed5b39726a2da39680056c09d3f9687 (diff)
downloadtracifyjs-cb4a02949e14a8ffad88c327204f016407218ce9.tar.gz
tracifyjs-cb4a02949e14a8ffad88c327204f016407218ce9.zip
fix corner case with `NaN` (#4437)
fixes #4436
-rw-r--r--lib/compress.js28
-rw-r--r--test/compress/destructured.js87
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"
+}