fix corner case in arguments (#3939)

This commit is contained in:
Alex Lam S.L
2020-05-31 05:18:27 +01:00
committed by GitHub
parent 0eb4577a82
commit 06ba4e2ce8
2 changed files with 45 additions and 37 deletions

View File

@@ -8322,7 +8322,8 @@ merge(Compressor.prototype, {
var argname = fn.argnames[index]; var argname = fn.argnames[index];
if (def.deleted && def.deleted[index]) { if (def.deleted && def.deleted[index]) {
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))) {
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

@@ -243,20 +243,18 @@ issue_3273: {
arguments: true, arguments: true,
} }
input: { input: {
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
function f(a) { (function(a) {
console.log(a, a); console.log(a, a);
a++; a++;
console.log(a, a); console.log(a, a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",
@@ -264,26 +262,43 @@ issue_3273: {
] ]
} }
issue_3273_no_call_arg: {
options = {
arguments: true,
}
input: {
(function(a) {
arguments[0] = "FAIL";
console.log(a);
})();
}
expect: {
(function(a) {
arguments[0] = "FAIL";
console.log(a);
})();
}
expect_stdout: "undefined"
}
issue_3273_reduce_vars: { issue_3273_reduce_vars: {
options = { options = {
arguments: true, arguments: true,
reduce_vars: true, reduce_vars: true,
} }
input: { input: {
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
function f(a) { (function(a) {
console.log(a, a); console.log(a, a);
a++; a++;
console.log(a, a); console.log(a, a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",
@@ -296,22 +311,20 @@ issue_3273_local_strict: {
arguments: true, arguments: true,
} }
input: { input: {
function f(a) { (function(a) {
"use strict"; "use strict";
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
function f(a) { (function(a) {
"use strict"; "use strict";
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",
@@ -325,22 +338,20 @@ issue_3273_local_strict_reduce_vars: {
reduce_vars: true, reduce_vars: true,
} }
input: { input: {
function f(a) { (function(a) {
"use strict"; "use strict";
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
function f(a) { (function(a) {
"use strict"; "use strict";
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",
@@ -354,21 +365,19 @@ issue_3273_global_strict: {
} }
input: { input: {
"use strict"; "use strict";
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
"use strict"; "use strict";
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",
@@ -383,21 +392,19 @@ issue_3273_global_strict_reduce_vars: {
} }
input: { input: {
"use strict"; "use strict";
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect: { expect: {
"use strict"; "use strict";
function f(a) { (function(a) {
console.log(arguments[0], a); console.log(arguments[0], a);
arguments[0]++; arguments[0]++;
console.log(arguments[0], a); console.log(arguments[0], a);
} })(0);
f(0);
} }
expect_stdout: [ expect_stdout: [
"0 0", "0 0",