handle pure_funcs under inline & reduce_vars correctly (#3066)

fixes #3065
This commit is contained in:
Alex Lam S.L
2018-04-10 02:46:38 +08:00
committed by GitHub
parent 87857b0f1b
commit 183da16896
3 changed files with 116 additions and 6 deletions

View File

@@ -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")