fix corner case in `if_return` (#3601)
authorAlex Lam S.L <alexlamsl@gmail.com>
Tue, 19 Nov 2019 07:45:20 +0000 (15:45 +0800)
committerGitHub <noreply@github.com>
Tue, 19 Nov 2019 07:45:20 +0000 (15:45 +0800)
fixes #3600

lib/compress.js
test/compress/if_return.js

index 8c1ed5b..4ce283d 100644 (file)
@@ -1805,6 +1805,7 @@ merge(Compressor.prototype, {
                         stat.alternative = make_node(AST_BlockStatement, stat, {
                             body: body
                         });
+                        statements[i] = stat;
                         statements[i] = stat.transform(compressor);
                         continue;
                     }
@@ -1817,6 +1818,7 @@ merge(Compressor.prototype, {
                             stat.condition = negated;
                             statements[j] = stat.body;
                             stat.body = next;
+                            statements[i] = stat;
                             statements[i] = stat.transform(compressor);
                             continue;
                         }
@@ -1834,6 +1836,7 @@ merge(Compressor.prototype, {
                         stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
                             body: body
                         });
+                        statements[i] = stat;
                         statements[i] = stat.transform(compressor);
                         continue;
                     }
index 857406d..82df1ce 100644 (file)
@@ -544,3 +544,32 @@ if_body_return_3: {
         "PASS",
     ]
 }
+
+issue_3600: {
+    options = {
+        if_return: true,
+        inline: true,
+        side_effects: true,
+        unused: true,
+    }
+    input: {
+        var c = 0;
+        (function() {
+            if ([ ][c++]); else return;
+            return void function() {
+                var b = --b, a = c = 42;
+                return c;
+            }();
+        })();
+        console.log(c);
+    }
+    expect: {
+        var c = 0;
+        (function() {
+            if ([][c++]) b = --b, c = 42;
+            var b;
+        })();
+        console.log(c);
+    }
+    expect_stdout: "1"
+}