enhance `assignments` (#3612)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 27 Nov 2019 23:40:34 +0000 (07:40 +0800)
committerGitHub <noreply@github.com>
Wed, 27 Nov 2019 23:40:34 +0000 (07:40 +0800)
lib/compress.js
test/compress/assignment.js

index 686a8d4..52c79a7 100644 (file)
@@ -6720,8 +6720,8 @@ merge(Compressor.prototype, {
                 self.right = self.right.left;
             }
         }
-        if ((self.operator == "+=" || self.operator == "-=")
-            && self.left.is_number(compressor)
+        if ((self.operator == "-=" || self.operator == "+="
+                && (self.left.is_boolean(compressor) || self.left.is_number(compressor)))
             && self.right instanceof AST_Number
             && self.right.getValue() === 1) {
             var op = self.operator.slice(0, -1);
index 5ca7440..2230272 100644 (file)
@@ -290,26 +290,60 @@ increment_decrement_2: {
     expect_stdout: "42"
 }
 
-issue_3375: {
+issue_3375_1: {
     options = {
         assignments: true,
         reduce_vars: true,
     }
     input: {
-        console.log(typeof function(b) {
+        function p(o) {
+            console.log(typeof o, o);
+        }
+        p(function(b) {
             var a = b += 1;
             --b;
             return a;
         }("object"));
     }
     expect: {
-        console.log(typeof function(b) {
+        function p(o) {
+            console.log(typeof o, o);
+        }
+        p(function(b) {
             var a = b += 1;
             --b;
             return a;
         }("object"));
     }
-    expect_stdout: "string"
+    expect_stdout: "string object1"
+}
+
+issue_3375_2: {
+    options = {
+        assignments: true,
+        reduce_vars: true,
+    }
+    input: {
+        function p(o) {
+            console.log(typeof o, o);
+        }
+        p(function(b) {
+            var a = b -= 1;
+            --b;
+            return a;
+        }("object"));
+    }
+    expect: {
+        function p(o) {
+            console.log(typeof o, o);
+        }
+        p(function(b) {
+            var a = --b;
+            --b;
+            return a;
+        }("object"));
+    }
+    expect_stdout: "number NaN"
 }
 
 issue_3427: {