fix corner case in `merge_vars` (#4629)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 9 Feb 2021 04:36:12 +0000 (04:36 +0000)
committerGitHub <noreply@github.com>
Tue, 9 Feb 2021 04:36:12 +0000 (12:36 +0800)
fixes #4628

lib/compress.js
test/compress/merge_vars.js

index 1d8c71c..c822a8e 100644 (file)
@@ -5276,8 +5276,13 @@ merge(Compressor.prototype, {
                 return true;
             }
             if (node instanceof AST_VarDef) {
-                if (node.value) node.value.walk(tw);
-                node.name.mark_symbol(node.value ? function(node) {
+                var assigned = node.value;
+                if (assigned) {
+                    assigned.walk(tw);
+                } else {
+                    assigned = segment.block instanceof AST_ForEnumeration && segment.block.init === tw.parent();
+                }
+                node.name.mark_symbol(assigned ? function(node) {
                     if (!(node instanceof AST_SymbolDeclaration)) return;
                     if (node instanceof AST_SymbolVar) {
                         mark(node);
index 1212be9..02d17d3 100644 (file)
@@ -3183,3 +3183,32 @@ issue_4257: {
         "1",
     ]
 }
+
+issue_4628: {
+    options = {
+        merge_vars: true,
+    }
+    input: {
+        (function() {
+            try {
+                console;
+            } finally {
+                var b = a;
+            }
+            for (var a in "foo");
+            console.log(b);
+        })();
+    }
+    expect: {
+        (function() {
+            try {
+                console;
+            } finally {
+                var b = a;
+            }
+            for (var a in "foo");
+            console.log(b);
+        })();
+    }
+    expect_stdout: "undefined"
+}