fix corner cases in keep_fargs & unused (#3618)
This commit is contained in:
@@ -5173,12 +5173,14 @@ merge(Compressor.prototype, {
|
||||
&& !fn.uses_arguments
|
||||
&& !fn.pinned()) {
|
||||
var pos = 0, last = 0;
|
||||
var drop_fargs = exp === fn && compressor.drop_fargs(fn, self)
|
||||
&& (!fn.name || !fn.name.definition().recursive_refs);
|
||||
var side_effects = [];
|
||||
for (var i = 0; i < self.args.length; i++) {
|
||||
var trim = i >= fn.argnames.length;
|
||||
if (trim || fn.argnames[i].__unused) {
|
||||
var node = self.args[i].drop_side_effect_free(compressor);
|
||||
if (exp === fn) {
|
||||
if (drop_fargs) {
|
||||
fn.argnames.splice(i, 1);
|
||||
self.args.splice(i, 1);
|
||||
if (node) side_effects.push(node);
|
||||
@@ -5207,8 +5209,17 @@ merge(Compressor.prototype, {
|
||||
}
|
||||
last = pos;
|
||||
}
|
||||
if (drop_fargs) for (; i < fn.argnames.length; i++) {
|
||||
if (fn.argnames[i].__unused) fn.argnames.splice(i--, 1);
|
||||
}
|
||||
self.args.length = last;
|
||||
if (side_effects.length) self.args.push(make_sequence(self, side_effects));
|
||||
if (side_effects.length) {
|
||||
var arg = make_sequence(self, side_effects);
|
||||
self.args.push(self.args.length < fn.argnames.length ? make_node(AST_UnaryPrefix, self, {
|
||||
operator: "void",
|
||||
expression: arg
|
||||
}) : arg);
|
||||
}
|
||||
}
|
||||
if (compressor.option("unsafe")) {
|
||||
if (is_undeclared_ref(exp)) switch (exp.name) {
|
||||
@@ -6568,6 +6579,7 @@ merge(Compressor.prototype, {
|
||||
name.scope = value;
|
||||
value.name = name;
|
||||
lambda_def = value.def_function(name);
|
||||
lambda_def.recursive_refs = def.recursive_refs;
|
||||
}
|
||||
value.walk(new TreeWalker(function(node) {
|
||||
if (!(node instanceof AST_SymbolRef)) return;
|
||||
|
||||
Reference in New Issue
Block a user