fix `AST_For.init` patch-up in `drop_unused()` (#1839)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 22 Apr 2017 17:51:56 +0000 (01:51 +0800)
committerGitHub <noreply@github.com>
Sat, 22 Apr 2017 17:51:56 +0000 (01:51 +0800)
fixes #1838

lib/compress.js
test/compress/drop-unused.js

index 22e012e..5a8f23b 100644 (file)
@@ -2066,6 +2066,7 @@ merge(Compressor.prototype, {
                     // certain combination of unused name + side effect leads to:
                     //    https://github.com/mishoo/UglifyJS2/issues/44
                     //    https://github.com/mishoo/UglifyJS2/issues/1830
+                    //    https://github.com/mishoo/UglifyJS2/issues/1838
                     // that's an invalid AST.
                     // We fix it at this stage by moving the `var` outside the `for`.
                     if (node instanceof AST_For) {
@@ -2075,6 +2076,8 @@ merge(Compressor.prototype, {
                             node.init = block.body.pop();
                             block.body.push(node);
                             return in_list ? MAP.splice(block.body) : block;
+                        } else if (node.init instanceof AST_SimpleStatement) {
+                            node.init = node.init.body;
                         } else if (is_empty(node.init)) {
                             node.init = null;
                         }
index 7456f67..c702cfa 100644 (file)
@@ -1092,3 +1092,25 @@ issue_1830_2: {
     }
     expect_stdout: "1"
 }
+
+issue_1838: {
+    options = {
+        join_vars: true,
+        loops: true,
+        unused: true,
+    }
+    beautify = {
+        beautify: true,
+    }
+    input: {
+        function f() {
+            var b = a;
+            while (c);
+        }
+    }
+    expect_exact: [
+        "function f() {",
+        "    for (a; c; ) ;",
+        "}",
+    ]
+}