fix corner case in arguments (#4810)

fixes #4809
This commit is contained in:
Alex Lam S.L
2021-03-21 02:40:32 +00:00
committed by GitHub
parent 8ea1ced389
commit 9faee3b66a
3 changed files with 50 additions and 12 deletions

View File

@@ -463,6 +463,7 @@ merge(Compressor.prototype, {
})) {
tw.defun_ids[def.id] = false;
}
def.reassigned = 0;
def.recursive_refs = 0;
def.references = [];
def.should_replace = undefined;
@@ -662,7 +663,7 @@ merge(Compressor.prototype, {
var key = node.property;
if (key.is_constant()) key = key.value;
if (!(key instanceof AST_Node) && !RE_POSITIVE_INTEGER.test(key)) return;
def.reassigned = true;
def.reassigned++;
(key instanceof AST_Node ? def.scope.argnames : [ def.scope.argnames[key] ]).forEach(function(argname) {
if (argname instanceof AST_SymbolFunarg) argname.definition().fixed = false;
});
@@ -11235,14 +11236,12 @@ merge(Compressor.prototype, {
|| !all(fn.argnames, function(argname) {
return argname instanceof AST_SymbolFunarg;
})) {
if (!compressor.option("reduce_vars")
|| def.reassigned
|| arg_def.assignments
|| arg_def.orig.length > 1) {
argname = null;
}
if (has_reassigned() || arg_def.assignments || arg_def.orig.length > 1) argname = null;
}
} else if (index < fn.argnames.length + 5 && compressor.drop_fargs(fn, fn_parent) && !fn.rest) {
} else if ((assigned || !has_reassigned())
&& index < fn.argnames.length + 5
&& compressor.drop_fargs(fn, fn_parent)
&& !fn.rest) {
while (index >= fn.argnames.length) {
argname = fn.make_var(AST_SymbolFunarg, fn, "argument_" + fn.argnames.length);
fn.argnames.push(argname);
@@ -11251,7 +11250,7 @@ merge(Compressor.prototype, {
if (argname && find_if(function(node) {
return node.name === argname.name;
}, fn.argnames) === argname) {
def.reassigned = false;
if (assigned) def.reassigned--;
var sym = make_node(AST_SymbolRef, self, argname);
sym.reference();
delete argname.__unused;
@@ -11330,6 +11329,10 @@ merge(Compressor.prototype, {
}
}
}
function has_reassigned() {
return !compressor.option("reduce_vars") || def.reassigned;
}
});
AST_Arrow.DEFMETHOD("contains_super", return_false);