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) {
argname = null;
} 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();
if (!compressor.option("reduce_vars")
|| def.reassigned

View File

@@ -1886,3 +1886,23 @@ issue_4386: {
expect_stdout: "PASS"
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;
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) {
// hoist and return expressions from the IIFE function expression
var body = node.expression.body;