fix corner case in `inline` (#3915)
authorAlex Lam S.L <alexlamsl@gmail.com>
Thu, 21 May 2020 14:05:31 +0000 (15:05 +0100)
committerGitHub <noreply@github.com>
Thu, 21 May 2020 14:05:31 +0000 (22:05 +0800)
fixes #3911

lib/compress.js
test/compress/functions.js

index 006b635..06d04cc 100644 (file)
@@ -6234,9 +6234,9 @@ merge(Compressor.prototype, {
                 && !fn.uses_arguments
                 && !fn.pinned()
                 && !(fn.name && fn instanceof AST_Function)
-                && (value = can_flatten_body(stat))
                 && (exp === fn
                     || !recursive_ref(compressor, def = exp.definition()) && fn.is_constant_expression(exp.scope))
+                && (value = can_flatten_body(stat))
                 && !fn.contains_this()) {
                 if (can_substitute_directly()) {
                     var args = self.args.slice();
index db5466e..7ad6ff0 100644 (file)
@@ -4680,3 +4680,28 @@ issue_3852: {
     }
     expect_stdout: "PASS"
 }
+
+issue_3911: {
+    options = {
+        collapse_vars: true,
+        conditionals: true,
+        inline: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        function f() {
+            return function() {
+                if (a) (a++, b += a);
+                f();
+            };
+        }
+        var a = f, b;
+        console.log("PASS");
+    }
+    expect: {
+        console.log("PASS");
+    }
+    expect_stdout: "PASS"
+}