fix corner case in `inline` (#5141)
authorAlex Lam S.L <alexlamsl@gmail.com>
Fri, 1 Oct 2021 22:54:42 +0000 (23:54 +0100)
committerGitHub <noreply@github.com>
Fri, 1 Oct 2021 22:54:42 +0000 (06:54 +0800)
fixes #5140

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

index 2aa2bca..3c0bf53 100644 (file)
@@ -9582,7 +9582,12 @@ merge(Compressor.prototype, {
                         });
                         return node;
                     } else if (!node.has_side_effects(compressor)) {
-                        self.drop_side_effect_free = return_null;
+                        self.drop_side_effect_free = function(compressor, first_in_statement) {
+                            var self = this;
+                            var exprs = self.args.slice();
+                            exprs.unshift(self.expression);
+                            return make_sequence(self, exprs).drop_side_effect_free(compressor, first_in_statement);
+                        };
                     }
                 }
                 var arg_used, insert, in_loop, scope;
index 6f59666..d5687a1 100644 (file)
@@ -6629,3 +6629,29 @@ issue_5120: {
     }
     expect_stdout: "PASS"
 }
+
+issue_5140: {
+    options = {
+        collapse_vars: true,
+        inline: true,
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        A = 42;
+        function f(b) {
+            return b >> 0;
+        }
+        var a = f(42 in []);
+        console.log(f(A));
+    }
+    expect: {
+        function f(b) {
+            return b >> 0;
+        }
+        A = 42;
+        console.log(A >> 0);
+    }
+    expect_stdout: "42"
+}