fix corner case in arguments (#3939)
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user