fix corner case in unused (#5225)

fixes #5224
This commit is contained in:
Alex Lam S.L
2021-12-19 18:25:38 +00:00
committed by GitHub
parent 9e927ecc9a
commit 86406e71ec
2 changed files with 53 additions and 5 deletions

View File

@@ -8076,7 +8076,11 @@ Compressor.prototype.compress = function(node) {
exprs = trim(exprs, compressor, first_in_statement, array_spread); exprs = trim(exprs, compressor, first_in_statement, array_spread);
return exprs && make_sequence(self, exprs.map(convert_spread)); return exprs && make_sequence(self, exprs.map(convert_spread));
} }
if (!fn.contains_this()) self = make_node(AST_Call, self, self); if (!fn.contains_this()) {
self = make_node(AST_Call, self, self);
self.expression = self.expression.clone();
self.args = self.args.slice();
}
} }
} }
self.call_only = true; self.call_only = true;
@@ -9565,7 +9569,7 @@ Compressor.prototype.compress = function(node) {
expression: exp.expression, expression: exp.expression,
property: "call", property: "call",
}), }),
args: args args: args,
}).optimize(compressor); }).optimize(compressor);
} }
break; break;
@@ -9579,11 +9583,11 @@ Compressor.prototype.compress = function(node) {
self.args[0], self.args[0],
make_node(AST_Call, self, { make_node(AST_Call, self, {
expression: exp.expression, expression: exp.expression,
args: self.args.slice(1) args: self.args.slice(1),
}) }),
]) : make_node(AST_Call, self, { ]) : make_node(AST_Call, self, {
expression: exp.expression, expression: exp.expression,
args: [] args: [],
})).optimize(compressor); })).optimize(compressor);
} }
break; break;

View File

@@ -3516,3 +3516,47 @@ issue_5079: {
} }
expect_stdout: "PASS" expect_stdout: "PASS"
} }
issue_5224: {
options = {
evaluate: true,
keep_fargs: false,
reduce_vars: true,
toplevel: true,
unused: true,
}
input: {
function f() {
try {
var b = function() {
var a = "FAIL 1";
null && a;
a = console.log(a);
}(new function(c, d) {
console.log(d);
a;
}("FAIL 2", Infinity));
} finally {
return f;
}
}
f();
}
expect: {
(function f() {
try {
(function() {
var a = "FAIL 1";
null;
a = console.log(a);
})(function() {
console.log(1 / 0);
a;
}());
} finally {
return f;
}
})();
}
expect_stdout: "Infinity"
}