fix corner case in `collapse_vars` (#4869)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 24 Apr 2021 21:16:51 +0000 (22:16 +0100)
committerGitHub <noreply@github.com>
Sat, 24 Apr 2021 21:16:51 +0000 (05:16 +0800)
fixes #4868

lib/compress.js
test/compress/collapse_vars.js

index 4c9026d..6c47562 100644 (file)
@@ -2563,8 +2563,13 @@ merge(Compressor.prototype, {
                     if (is_lhs_read_only(value, compressor)) return;
                     var referenced = def.references.length - def.replaced;
                     if (referenced < 2) return;
-                    candidate = candidate.clone();
-                    candidate[candidate instanceof AST_Assign ? "right" : "value"] = value;
+                    var expr = candidate.clone();
+                    expr[expr instanceof AST_Assign ? "right" : "value"] = value;
+                    if (candidate.name_index >= 0) {
+                        expr.name_index = candidate.name_index;
+                        expr.arg_index = candidate.arg_index;
+                    }
+                    candidate = expr;
                 }
                 return value_def = def;
             }
index 4051bb1..36cba2a 100644 (file)
@@ -9010,3 +9010,23 @@ issue_4865: {
     }
     expect_stdout: true
 }
+
+issue_4868: {
+    options = {
+        collapse_vars: true,
+        unused: true,
+    }
+    input: {
+        var a;
+        (function(b) {
+            console.log(b[0]);
+        })(a = [ "PASS" ], a = [ "FAIL" ]);
+    }
+    expect: {
+        var a;
+        (function(b) {
+            console.log(b[0]);
+        })(a = [ "PASS" ], a = [ "FAIL" ]);
+    }
+    expect_stdout: "PASS"
+}