@@ -4300,18 +4300,18 @@ Compressor.prototype.compress = function(node) {
|
|||||||
if (prop instanceof AST_Node) return;
|
if (prop instanceof AST_Node) return;
|
||||||
if (!RE_POSITIVE_INTEGER.test("" + prop)) return;
|
if (!RE_POSITIVE_INTEGER.test("" + prop)) return;
|
||||||
prop = +prop;
|
prop = +prop;
|
||||||
var len = value.elements.length;
|
var elements = value.elements;
|
||||||
|
var len = elements.length;
|
||||||
if (prop > len + 4) return;
|
if (prop > len + 4) return;
|
||||||
|
for (var i = Math.min(len, prop + 1); --i >= 0;) {
|
||||||
|
if (elements[i] instanceof AST_Spread) return;
|
||||||
|
}
|
||||||
if (prop < len) {
|
if (prop < len) {
|
||||||
var element = value.elements[prop];
|
var element = elements[prop].drop_side_effect_free(compressor);
|
||||||
if (element instanceof AST_Hole) {
|
elements[prop] = element ? make_sequence(node, [ element, node.right ]) : node.right;
|
||||||
value.elements[prop] = node.right;
|
|
||||||
} else {
|
|
||||||
value.elements[prop] = make_sequence(node, [ element, node.right ]).optimize(compressor);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
while (prop > len) value.elements[len++] = make_node(AST_Hole, value);
|
while (prop > len) elements[len++] = make_node(AST_Hole, value);
|
||||||
value.elements[prop] = node.right;
|
elements[prop] = node.right;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ join_array_assignments_1: {
|
|||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo", , "bar"];
|
var a = [ "foo", , "bar" ];
|
||||||
a[1] = "baz";
|
a[1] = "baz";
|
||||||
a[7] = "moo";
|
a[7] = "moo";
|
||||||
a[0] = "moz";
|
a[0] = "moz";
|
||||||
@@ -32,7 +32,7 @@ join_array_assignments_1: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = [("foo", "moz"), "baz", "bar", , , , , "moo"];
|
var a = [ "moz", "baz", "bar", , , , , "moo" ];
|
||||||
return a;
|
return a;
|
||||||
}().join());
|
}().join());
|
||||||
}
|
}
|
||||||
@@ -46,7 +46,7 @@ join_array_assignments_2: {
|
|||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo"];
|
var a = [ "foo" ];
|
||||||
a[1] = "bar";
|
a[1] = "bar";
|
||||||
a[7] = "baz";
|
a[7] = "baz";
|
||||||
a[2] = "moo";
|
a[2] = "moo";
|
||||||
@@ -55,7 +55,7 @@ join_array_assignments_2: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo", "bar"];
|
var a = [ "foo", "bar" ];
|
||||||
a[7] = "baz";
|
a[7] = "baz";
|
||||||
a[2] = "moo";
|
a[2] = "moo";
|
||||||
return a;
|
return a;
|
||||||
@@ -71,7 +71,7 @@ join_array_assignments_3: {
|
|||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo"];
|
var a = [ "foo" ];
|
||||||
a[1] = "bar";
|
a[1] = "bar";
|
||||||
a.b = "baz";
|
a.b = "baz";
|
||||||
a[2] = "moo";
|
a[2] = "moo";
|
||||||
@@ -80,7 +80,7 @@ join_array_assignments_3: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo", "bar"];
|
var a = [ "foo", "bar" ];
|
||||||
a.b = "baz";
|
a.b = "baz";
|
||||||
a[2] = "moo";
|
a[2] = "moo";
|
||||||
return a;
|
return a;
|
||||||
@@ -97,7 +97,7 @@ join_array_assignments_4: {
|
|||||||
}
|
}
|
||||||
input: {
|
input: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["foo"];
|
var a = [ "foo" ];
|
||||||
a[0] = "bar";
|
a[0] = "bar";
|
||||||
a[1] = a;
|
a[1] = a;
|
||||||
a[2] = "baz";
|
a[2] = "baz";
|
||||||
@@ -106,7 +106,7 @@ join_array_assignments_4: {
|
|||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log(function () {
|
console.log(function () {
|
||||||
var a = ["bar"];
|
var a = [ "bar" ];
|
||||||
a[1] = a;
|
a[1] = a;
|
||||||
a[2] = "baz";
|
a[2] = "baz";
|
||||||
return a;
|
return a;
|
||||||
@@ -1508,3 +1508,22 @@ issue_5831: {
|
|||||||
}
|
}
|
||||||
expect_stdout: "PASS"
|
expect_stdout: "PASS"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5849: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
join_vars: true,
|
||||||
|
side_effects: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a;
|
||||||
|
a = [ 42 ];
|
||||||
|
a[0] = "PASS";
|
||||||
|
console.log(a.join(""));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a, a = [ "PASS" ];
|
||||||
|
console.log(a.join(""));
|
||||||
|
}
|
||||||
|
expect_stdout: "PASS"
|
||||||
|
}
|
||||||
|
|||||||
@@ -1253,3 +1253,24 @@ issue_5602: {
|
|||||||
]
|
]
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
issue_5850: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
join_vars: true,
|
||||||
|
unused: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = [ ..."FAIL" ];
|
||||||
|
a[0] = "P";
|
||||||
|
a[2] = a[3] = "S";
|
||||||
|
console.log(a.join(""));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = [ ..."FAIL" ];
|
||||||
|
a[0] = "P";
|
||||||
|
a[2] = a[3] = "S";
|
||||||
|
console.log(a.join(""));
|
||||||
|
}
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user