fix corner case in inline (#3837)

fixes #3836
This commit is contained in:
Alex Lam S.L
2020-05-01 10:20:23 +01:00
committed by GitHub
parent 74801de315
commit 0794aaa2c2
2 changed files with 119 additions and 82 deletions

View File

@@ -4003,16 +4003,30 @@ merge(Compressor.prototype, {
})) break;
}
if (fn.contains_this()) break;
var j = fn.argnames.length;
if (j > 0 && compressor.option("inline") < 2) break;
if (j > self.argnames.length) break;
if (j < self.argnames.length && !compressor.drop_fargs(fn, call)) break;
while (--j >= 0) {
var len = fn.argnames.length;
if (len > 0 && compressor.option("inline") < 2) break;
if (len > self.argnames.length) break;
for (var j = 0; j < len; j++) {
var arg = call.args[j];
if (!(arg instanceof AST_SymbolRef)) break;
if (arg.definition() !== self.argnames[j].definition()) break;
}
if (j >= 0) break;
if (j < len) break;
for (; j < call.args.length; j++) {
if (call.args[j].has_side_effects(compressor)) break;
}
if (j < call.args.length) break;
if (len < self.argnames.length && !compressor.drop_fargs(self, compressor.parent())) {
if (!compressor.drop_fargs(fn, call)) break;
do {
var argname = make_node(AST_SymbolFunarg, fn, {
name: fn.make_var_name("argument_" + len),
scope: fn
});
fn.argnames.push(argname);
fn.enclosed.push(fn.def_variable(argname));
} while (++len < self.argnames.length);
}
return call.expression;
}
break;