fix corner case in `inline` (#4322)
authorAlex Lam S.L <alexlamsl@gmail.com>
Sat, 28 Nov 2020 19:48:42 +0000 (19:48 +0000)
committerGitHub <noreply@github.com>
Sat, 28 Nov 2020 19:48:42 +0000 (03:48 +0800)
fixes #4321

lib/compress.js
test/compress/destructured.js

index 1d72909..7759ff1 100644 (file)
@@ -4609,12 +4609,13 @@ merge(Compressor.prototype, {
                 var len = fn.argnames.length;
                 if (len > 0 && compressor.option("inline") < 2) break;
                 if (len > self.argnames.length) break;
+                if (!all(self.argnames, function(argname) {
+                    return argname instanceof AST_SymbolFunarg;
+                })) break;
                 for (var j = 0; j < len; j++) {
                     var arg = call.args[j];
                     if (!(arg instanceof AST_SymbolRef)) break;
-                    var argname = self.argnames[j];
-                    if (!(argname instanceof AST_SymbolFunarg)) break;
-                    if (arg.definition() !== argname.definition()) break;
+                    if (arg.definition() !== self.argnames[j].definition()) break;
                 }
                 if (j < len) break;
                 for (; j < call.args.length; j++) {
index afc9152..d751e25 100644 (file)
@@ -1710,3 +1710,34 @@ issue_4319: {
     expect_stdout: "undefined"
     node_version: ">=6"
 }
+
+issue_4321: {
+    options = {
+        inline: true,
+        keep_fargs: "strict",
+    }
+    input: {
+        try {
+            console.log(function({}) {
+                return function() {
+                    while (!console);
+                }();
+            }());
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect: {
+        try {
+            console.log(function({}) {
+                return function() {
+                    while (!console);
+                }();
+            }());
+        } catch (e) {
+            console.log("PASS");
+        }
+    }
+    expect_stdout: "PASS"
+    node_version: ">=6"
+}