fix corner case in `conditionals` (#4777)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 15 Mar 2021 04:44:41 +0000 (04:44 +0000)
committerGitHub <noreply@github.com>
Mon, 15 Mar 2021 04:44:41 +0000 (12:44 +0800)
lib/compress.js
test/compress/spreads.js

index 3830f0d..bdd3c94 100644 (file)
@@ -11044,6 +11044,7 @@ merge(Compressor.prototype, {
             if (len != b.length) return -2;
             for (var i = 0; i < len; i++) {
                 if (!a[i].equivalent_to(b[i])) {
+                    if (a[i] instanceof AST_Spread !== b[i] instanceof AST_Spread) return -3;
                     for (var j = i + 1; j < len; j++) {
                         if (!a[j].equivalent_to(b[j])) return -2;
                     }
index a3a7003..ba10167 100644 (file)
@@ -85,7 +85,7 @@ collapse_vars_4: {
     node_version: ">=6"
 }
 
-conditionals_farg: {
+conditionals_farg_1: {
     options = {
         conditionals: true,
     }
@@ -107,6 +107,28 @@ conditionals_farg: {
     node_version: ">=6"
 }
 
+conditionals_farg_2: {
+    options = {
+        conditionals: true,
+        pure_getters: "strict",
+        reduce_vars: true,
+    }
+    input: {
+        var log = console.log;
+        (function(a) {
+            return a.length ? log(...a) : log("FAIL");
+        })([ "PASS" ]);
+    }
+    expect: {
+        var log = console.log;
+        (function(a) {
+            return a.length ? log(...a) : log("FAIL");
+        })([ "PASS" ]);
+    }
+    expect_stdout: "PASS"
+    node_version: ">=6"
+}
+
 dont_inline: {
     options = {
         inline: true,