fix corner case in evaluate & reduce_vars (#4423)

fixes #4422
This commit is contained in:
Alex Lam S.L
2020-12-19 21:47:15 +00:00
committed by GitHub
parent 87cf715213
commit 8ce3c7d70f
2 changed files with 31 additions and 1 deletions

View File

@@ -595,7 +595,14 @@ merge(Compressor.prototype, {
var expr = node.expression;
if (!(expr instanceof AST_SymbolRef)) return;
var def = expr.definition();
if (is_arguments(def) && node.property instanceof AST_Number) def.reassigned = true;
if (!is_arguments(def)) return;
var key = node.property;
if (key.is_constant()) key = key.value;
if (!(key instanceof AST_Node) && !/^[1-9]*[0-9]$/.test(key)) return;
def.reassigned = true;
(key instanceof AST_Node ? def.scope.argnames : [ def.scope.argnames[key] ]).forEach(function(argname) {
if (argname instanceof AST_SymbolFunarg) argname.definition().fixed = false;
});
}
function scan_declaration(tw, lhs, fixed, visit) {

View File

@@ -3094,3 +3094,26 @@ issue_4393: {
}
expect_stdout: "PASS"
}
issue_4422: {
options = {
evaluate: true,
reduce_vars: true,
unused: true,
}
input: {
console.log(function f(a) {
a = "FAIL 1";
arguments[0] = "PASS";
return a;
}("FAIL 2"));
}
expect: {
console.log(function(a) {
a = "FAIL 1";
arguments[0] = "PASS";
return a;
}("FAIL 2"));
}
expect_stdout: "PASS"
}