aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js7
-rw-r--r--test/compress/destructured.js31
2 files changed, 35 insertions, 3 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 1d729096..7759ff11 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -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++) {
diff --git a/test/compress/destructured.js b/test/compress/destructured.js
index afc9152b..d751e253 100644
--- a/test/compress/destructured.js
+++ b/test/compress/destructured.js
@@ -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"
+}