fix corner case in `reduce_vars` (#4031)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 31 Jul 2020 00:05:09 +0000 (01:05 +0100)
committerGitHub <noreply@github.com>
Fri, 31 Jul 2020 00:05:09 +0000 (08:05 +0800)
fixes #4030

lib/compress.js
test/compress/reduce_vars.js

index d439ed4..792d5ab 100644 (file)
@@ -587,7 +587,10 @@ merge(Compressor.prototype, {
             d.assignments++;
             var fixed = d.fixed;
             var value = eq ? node.right : node;
-            if (is_modified(compressor, tw, node, value, 0)) return;
+            if (is_modified(compressor, tw, node, value, 0)) {
+                d.fixed = false;
+                return;
+            }
             var safe = eq || safe_to_read(tw, d);
             node.right.walk(tw);
             if (safe && safe_to_assign(tw, d)) {
index 9010fb1..85969f9 100644 (file)
@@ -7383,3 +7383,26 @@ issue_3974: {
     }
     expect_stdout: "PASS"
 }
+
+issue_4030: {
+    options = {
+        collapse_vars: true,
+        evaluate: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        var a;
+        {
+            delete (a = "PASS");
+            A = "PASS";
+        }
+        console.log(A);
+    }
+    expect: {
+        A = "PASS";
+        console.log("PASS");
+    }
+    expect_stdout: "PASS"
+}