fix corner case in `inline` (#4007)
authorAlex Lam S.L <alexlamsl@gmail.com>
Mon, 29 Jun 2020 01:06:23 +0000 (02:06 +0100)
committerGitHub <noreply@github.com>
Mon, 29 Jun 2020 01:06:23 +0000 (09:06 +0800)
fixes #4006

lib/compress.js
test/compress/functions.js
test/ufuzz/index.js

index 0e11ba9..10a84c6 100644 (file)
@@ -6415,16 +6415,11 @@ merge(Compressor.prototype, {
 
         function return_value(stat) {
             if (!stat) return make_node(AST_Undefined, self);
-            if (stat instanceof AST_Return) {
-                if (!stat.value) return make_node(AST_Undefined, self);
-                return stat.value.clone(true);
-            }
-            if (stat instanceof AST_SimpleStatement) {
-                return make_node(AST_UnaryPrefix, stat, {
-                    operator: "void",
-                    expression: stat.body
-                });
-            }
+            if (stat instanceof AST_Return) return stat.value || make_node(AST_Undefined, self);
+            if (stat instanceof AST_SimpleStatement) return make_node(AST_UnaryPrefix, stat, {
+                operator: "void",
+                expression: stat.body
+            });
         }
 
         function can_flatten_body(stat) {
index 1383dbe..18f4f90 100644 (file)
@@ -4747,3 +4747,34 @@ issue_3929: {
     }
     expect_stdout: "function"
 }
+
+issue_4006: {
+    options = {
+        dead_code: true,
+        evaluate: true,
+        inline: true,
+        keep_fargs: "strict",
+        reduce_vars: true,
+        sequences: true,
+        side_effects: true,
+        unused: true,
+    }
+    input: {
+        var a = 0;
+        (function() {
+            (function(b, c) {
+                for (var k in console.log(c), 0)
+                    return b += 0;
+            })(0, --a);
+            return a ? 0 : --a;
+        })();
+    }
+    expect: {
+        var a = 0;
+        (function(c) {
+            for (var k in console.log(c), 0)
+                return;
+        })(--a), a || --a;
+    }
+    expect_stdout: "-1"
+}
index 7fe3530..64ea805 100644 (file)
@@ -197,6 +197,7 @@ BINARY_OPS = BINARY_OPS.concat(BINARY_OPS);
 BINARY_OPS = BINARY_OPS.concat(BINARY_OPS);
 BINARY_OPS = BINARY_OPS.concat(BINARY_OPS);
 BINARY_OPS = BINARY_OPS.concat(BINARY_OPS);
+BINARY_OPS = BINARY_OPS.concat(BINARY_OPS);
 BINARY_OPS.push(" in ");
 
 var ASSIGNMENTS = [