collapse_vars should not replace constant in for-in init section (#1538)
authorkzc <kzc@users.noreply.github.com>
Thu, 2 Mar 2017 19:51:15 +0000 (14:51 -0500)
committerAlex Lam S.L <alexlamsl@gmail.com>
Thu, 2 Mar 2017 19:51:15 +0000 (03:51 +0800)
fixes #1537

lib/compress.js
test/compress/collapse_vars.js

index f67f1d2..deb55ad 100644 (file)
@@ -480,8 +480,12 @@ merge(Compressor.prototype, {
                     // Constant single use vars can be replaced in any scope.
                     if (var_decl.value.is_constant()) {
                         var ctt = new TreeTransformer(function(node) {
-                            if (node === ref)
-                                return replace_var(node, ctt.parent(), true);
+                            if (node === ref) {
+                                var parent = ctt.parent();
+                                if (!(parent instanceof AST_ForIn && parent.init === node)) {
+                                    return replace_var(node, parent, true);
+                                }
+                            }
                         });
                         stat.transform(ctt);
                         continue;
@@ -570,7 +574,7 @@ merge(Compressor.prototype, {
                 // Further optimize statement after substitution.
                 stat.reset_opt_flags(compressor);
 
-                compressor.warn("Replacing " + (is_constant ? "constant" : "variable") +
+                compressor.warn("Collapsing " + (is_constant ? "constant" : "variable") +
                     " " + var_name + " [{file}:{line},{col}]", node.start);
                 CHANGED = true;
                 return value;
index 5f63488..82d943f 100644 (file)
@@ -1315,3 +1315,17 @@ collapse_vars_regexp: {
         })();
     }
 }
+
+issue_1537: {
+    options = {
+        collapse_vars: true,
+    }
+    input: {
+        var k = '';
+        for (k in {prop: 'val'}){}
+    }
+    expect: {
+        var k = '';
+        for (k in {prop: 'val'});
+    }
+}