properly cover all cases of for-in loop variables (#1536)
authorAlex Lam S.L <alexlamsl@gmail.com>
Thu, 2 Mar 2017 18:39:57 +0000 (02:39 +0800)
committerGitHub <noreply@github.com>
Thu, 2 Mar 2017 18:39:57 +0000 (02:39 +0800)
lib/compress.js
test/compress/reduce_vars.js

index d4b10b5..f67f1d2 100644 (file)
@@ -243,13 +243,13 @@ merge(Compressor.prototype, {
                     return true;
                 }
                 if (node instanceof AST_ForIn) {
-                    if (node.init instanceof AST_SymbolRef) {
-                        var d = node.init.definition();
-                        d.references.push(node.init);
-                        d.fixed = false;
-                    } else {
-                        node.init.walk(tw);
+                    var sym = node.init;
+                    if (sym instanceof AST_Var) {
+                        sym = sym.definitions[0].name;
                     }
+                    var d = sym.definition();
+                    d.references.push(sym);
+                    d.fixed = false;
                     node.object.walk(tw);
                     push();
                     node.body.walk(tw);
index 87b1fc2..557631b 100644 (file)
@@ -563,7 +563,7 @@ inner_var_for: {
     }
 }
 
-inner_var_for_in: {
+inner_var_for_in_1: {
     options = {
         evaluate: true,
         reduce_vars: true,
@@ -590,6 +590,21 @@ inner_var_for_in: {
     }
 }
 
+inner_var_for_in_2: {
+    options = {
+        evaluate: true,
+        reduce_vars: true,
+    }
+    input: {
+        for (var long_name in {})
+            console.log(long_name);
+    }
+    expect: {
+        for (var long_name in {})
+            console.log(long_name);
+    }
+}
+
 issue_1533_1: {
     options = {
         collapse_vars: true,