fix corner case in `evaluate` (#4143)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 22 Sep 2020 04:11:25 +0000 (05:11 +0100)
committerGitHub <noreply@github.com>
Tue, 22 Sep 2020 04:11:25 +0000 (12:11 +0800)
fixes #4142

lib/compress.js
test/compress/numbers.js

index cf46e47..f66b718 100644 (file)
@@ -7767,12 +7767,11 @@ merge(Compressor.prototype, {
                 associative = compressor.option("unsafe_math");
                 // +a - b => a - b
                 // a - +b => a - b
-                [ "left", "right" ].forEach(function(operand) {
+                if (self.operator != "+") [ "left", "right" ].forEach(function(operand) {
                     var node = self[operand];
                     if (node instanceof AST_UnaryPrefix && node.operator == "+") {
                         var exp = node.expression;
-                        if (exp.is_boolean(compressor) || exp.is_number(compressor)
-                            || self.operator != "+" && exp.is_string(compressor)) {
+                        if (exp.is_boolean(compressor) || exp.is_number(compressor) || exp.is_string(compressor)) {
                             self[operand] = exp;
                         }
                     }
index 7f355a1..c7aab68 100644 (file)
@@ -1322,3 +1322,16 @@ issue_4137: {
     }
     expect_stdout: "0"
 }
+
+issue_4142: {
+    options = {
+        evaluate: true,
+    }
+    input: {
+        console.log("" + +(0 === console));
+    }
+    expect: {
+        console.log("" + +(0 === console));
+    }
+    expect_stdout: "0"
+}