enhance `reduce_vars` (#5163)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 2 Nov 2021 03:32:26 +0000 (11:32 +0800)
committerGitHub <noreply@github.com>
Tue, 2 Nov 2021 03:32:26 +0000 (11:32 +0800)
lib/compress.js
test/compress/assignments.js

index d68a045..edc45b8 100644 (file)
@@ -899,30 +899,22 @@ merge(Compressor.prototype, {
               case "&&=":
               case "||=":
               case "??=":
-                left.walk(tw);
-                push(tw);
-                if (scan) {
-                    right.walk(tw);
-                    walk_assign();
-                } else {
-                    mark_assignment_to_arguments(left);
-                    right.walk(tw);
-                }
-                pop(tw);
-                return true;
+                var lazy = true;
               default:
                 if (!scan) {
                     mark_assignment_to_arguments(left);
-                    return;
+                    return walk_lazy();
                 }
                 ld.assignments++;
                 var fixed = ld.fixed;
                 if (is_modified(compressor, tw, node, node, 0)) {
                     ld.fixed = false;
-                    return;
+                    return walk_lazy();
                 }
                 var safe = safe_to_read(tw, ld);
+                if (lazy) push(tw);
                 right.walk(tw);
+                if (lazy) pop(tw);
                 if (safe && !left.in_arg && safe_to_assign(tw, ld)) {
                     push_ref(ld, left);
                     mark(tw, ld);
@@ -995,6 +987,15 @@ merge(Compressor.prototype, {
                     }
                 });
             }
+
+            function walk_lazy() {
+                if (!lazy) return;
+                left.walk(tw);
+                push(tw);
+                right.walk(tw);
+                pop(tw);
+                return true;
+            }
         });
         def(AST_Binary, function(tw) {
             if (!lazy_op[this.operator]) return;
index 84cc5d6..37c6741 100644 (file)
@@ -550,6 +550,24 @@ logical_side_effects: {
     node_version: ">=15"
 }
 
+evaluate_lazy_assignment: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        var a = 42;
+        console.log(a &&= "PASS");
+    }
+    expect: {
+        console.log("PASS");
+    }
+    expect_stdout: "PASS"
+    node_version: ">=15"
+}
+
 issue_4815_1: {
     options = {
         evaluate: true,