fix corner case in `loops` & `unused` (#4076)
authorAlex Lam S.L <alexlamsl@gmail.com>
Wed, 26 Aug 2020 09:32:20 +0000 (10:32 +0100)
committerGitHub <noreply@github.com>
Wed, 26 Aug 2020 09:32:20 +0000 (17:32 +0800)
fixes #4075

lib/compress.js
test/compress/loops.js

index 213cead..a1f3d50 100644 (file)
@@ -4677,7 +4677,9 @@ merge(Compressor.prototype, {
                     sym = sym.expression.tail_node();
                 }
                 var def = sym.definition();
-                if (!def || def.id in in_use_ids) return;
+                if (!def) return;
+                if (def.scope !== self) return;
+                if (def.id in in_use_ids) return;
                 log(sym, "Dropping unused loop variable {name}");
                 var value = node.object.drop_side_effect_free(compressor);
                 if (!value) return in_list ? List.skip : make_node(AST_EmptyStatement, node);
index 4a276b9..23d46de 100644 (file)
@@ -963,3 +963,25 @@ issue_3634_2: {
     }
     expect_stdout: "1"
 }
+
+issue_4075: {
+    options = {
+        loops: true,
+        unused: true,
+    }
+    input: {
+        var a = "FAIL";
+        (function() {
+            for (a in { PASS: 0 });
+        })()
+        console.log(a);
+    }
+    expect: {
+        var a = "FAIL";
+        (function() {
+            for (a in { PASS: 0 });
+        })()
+        console.log(a);
+    }
+    expect_stdout: "PASS"
+}