fix corner case in arguments (#4396)

fixes #4395
This commit is contained in:
Alex Lam S.L
2020-12-18 00:41:13 +00:00
committed by GitHub
parent 2c637fea8a
commit c1256c399a
3 changed files with 30 additions and 1 deletions

View File

@@ -9897,7 +9897,10 @@ merge(Compressor.prototype, {
} else if (argname instanceof AST_Destructured) { } else if (argname instanceof AST_Destructured) {
argname = null; argname = null;
} else if (argname && (compressor.has_directive("use strict") } else if (argname && (compressor.has_directive("use strict")
|| !(fn_parent instanceof AST_Call && index < fn_parent.args.length))) { || !(fn_parent instanceof AST_Call && index < fn_parent.args.length)
|| !all(fn.argnames, function(argname) {
return !(argname instanceof AST_Destructured);
}))) {
var arg_def = argname.definition(); var arg_def = argname.definition();
if (!compressor.option("reduce_vars") if (!compressor.option("reduce_vars")
|| def.reassigned || def.reassigned

View File

@@ -1886,3 +1886,23 @@ issue_4386: {
expect_stdout: "PASS" expect_stdout: "PASS"
node_version: ">=6" node_version: ">=6"
} }
issue_4395: {
options = {
arguments: true,
}
input: {
console.log(function(a, {}) {
a = "FAIL";
return arguments[0];
}("PASS", 42));
}
expect: {
console.log(function(a, {}) {
a = "FAIL";
return arguments[0];
}("PASS", 42));
}
expect_stdout: "PASS"
node_version: ">=6"
}

View File

@@ -175,6 +175,12 @@ module.exports = function reduce_test(testcase, minify_options, reduce_options)
CHANGED = true; CHANGED = true;
return expr instanceof U.AST_Spread ? expr.expression : expr; return expr instanceof U.AST_Spread ? expr.expression : expr;
} }
if (node.expression instanceof U.AST_Arrow && node.expression.value) {
var seq = node.args.slice();
seq.push(node.expression.value);
CHANGED = true;
return to_sequence(seq);
}
if (node.expression instanceof U.AST_Function) { if (node.expression instanceof U.AST_Function) {
// hoist and return expressions from the IIFE function expression // hoist and return expressions from the IIFE function expression
var body = node.expression.body; var body = node.expression.body;