enhance `reduce_vars` & `varify` (#4714)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 2 Mar 2021 07:27:55 +0000 (07:27 +0000)
committerGitHub <noreply@github.com>
Tue, 2 Mar 2021 07:27:55 +0000 (15:27 +0800)
lib/compress.js
test/compress/let.js
test/compress/varify.js

index 2d82669..393e319 100644 (file)
@@ -1259,10 +1259,13 @@ merge(Compressor.prototype, {
         });
         def(AST_VarDef, function(tw, descend, compressor) {
             var node = this;
-            if (!node.value) return;
-            node.value.walk(tw);
+            if (node.value) {
+                node.value.walk(tw);
+            } else if (!(tw.parent() instanceof AST_Let)) {
+                return;
+            }
             scan_declaration(tw, compressor, node.name, function() {
-                return node.value;
+                return node.value || make_node(AST_Undefined, node);
             }, function(name, fixed) {
                 var d = name.definition();
                 if (fixed && safe_to_assign(tw, d, true)) {
index 04002e9..53956c4 100644 (file)
@@ -610,6 +610,28 @@ drop_unused: {
     node_version: ">=4"
 }
 
+default_init: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+        sequences: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        "use strict";
+        let a;
+        a = "PASS";
+        console.log(a);
+    }
+    expect: {
+        "use strict";
+        console.log("PASS");
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}
+
 issue_4191: {
     options = {
         functions: true,
index 4d2a6b5..ab21284 100644 (file)
@@ -409,3 +409,31 @@ drop_forin_let: {
     expect_stdout: "PASS"
     node_version: ">=4"
 }
+
+default_init: {
+    options = {
+        join_vars: true,
+        reduce_vars: true,
+        unused: true,
+        varify: true,
+    }
+    input: {
+        A = "PASS";
+        (function() {
+            "use strict";
+            let a;
+            a = A;
+            console.log(a);
+        })();
+    }
+    expect: {
+        A = "PASS";
+        (function() {
+            "use strict";
+            var a = A;
+            console.log(a);
+        })();
+    }
+    expect_stdout: "PASS"
+    node_version: ">=4"
+}