handle pure_funcs under inline & reduce_vars correctly (#3066)
fixes #3065
This commit is contained in:
@@ -4573,7 +4573,8 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
}
|
||||
var stat = is_func && fn.body[0];
|
||||
if (compressor.option("inline") && stat instanceof AST_Return) {
|
||||
var can_inline = compressor.option("inline") && !self.is_expr_pure(compressor);
|
||||
if (can_inline && stat instanceof AST_Return) {
|
||||
var value = stat.value;
|
||||
if (!value || value.is_constant_expression()) {
|
||||
if (value) {
|
||||
@@ -4587,7 +4588,7 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
if (is_func) {
|
||||
var def, value, scope, in_loop, level = -1;
|
||||
if (compressor.option("inline")
|
||||
if (can_inline
|
||||
&& !fn.uses_arguments
|
||||
&& !fn.uses_eval
|
||||
&& !(fn.name && fn instanceof AST_Function)
|
||||
@@ -5460,11 +5461,12 @@ merge(Compressor.prototype, {
|
||||
return make_node(AST_Infinity, self).optimize(compressor);
|
||||
}
|
||||
}
|
||||
if (compressor.option("reduce_vars")
|
||||
&& is_lhs(self, compressor.parent()) !== self) {
|
||||
var parent = compressor.parent();
|
||||
if (compressor.option("reduce_vars") && is_lhs(self, parent) !== self) {
|
||||
var d = self.definition();
|
||||
var fixed = self.fixed_value();
|
||||
var single_use = d.single_use;
|
||||
var single_use = d.single_use
|
||||
&& !(parent instanceof AST_Call && parent.is_expr_pure(compressor));
|
||||
if (single_use && fixed instanceof AST_Lambda) {
|
||||
if (d.scope !== self.scope
|
||||
&& (!compressor.option("reduce_funcs")
|
||||
|
||||
Reference in New Issue
Block a user