@@ -4300,18 +4300,18 @@ Compressor.prototype.compress = function(node) {
|
||||
if (prop instanceof AST_Node) return;
|
||||
if (!RE_POSITIVE_INTEGER.test("" + prop)) return;
|
||||
prop = +prop;
|
||||
var len = value.elements.length;
|
||||
var elements = value.elements;
|
||||
var len = elements.length;
|
||||
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) {
|
||||
var element = value.elements[prop];
|
||||
if (element instanceof AST_Hole) {
|
||||
value.elements[prop] = node.right;
|
||||
} else {
|
||||
value.elements[prop] = make_sequence(node, [ element, node.right ]).optimize(compressor);
|
||||
}
|
||||
var element = elements[prop].drop_side_effect_free(compressor);
|
||||
elements[prop] = element ? make_sequence(node, [ element, node.right ]) : node.right;
|
||||
} else {
|
||||
while (prop > len) value.elements[len++] = make_node(AST_Hole, value);
|
||||
value.elements[prop] = node.right;
|
||||
while (prop > len) elements[len++] = make_node(AST_Hole, value);
|
||||
elements[prop] = node.right;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ join_array_assignments_1: {
|
||||
}
|
||||
input: {
|
||||
console.log(function () {
|
||||
var a = ["foo", , "bar"];
|
||||
var a = [ "foo", , "bar" ];
|
||||
a[1] = "baz";
|
||||
a[7] = "moo";
|
||||
a[0] = "moz";
|
||||
@@ -32,7 +32,7 @@ join_array_assignments_1: {
|
||||
}
|
||||
expect: {
|
||||
console.log(function () {
|
||||
var a = [("foo", "moz"), "baz", "bar", , , , , "moo"];
|
||||
var a = [ "moz", "baz", "bar", , , , , "moo" ];
|
||||
return a;
|
||||
}().join());
|
||||
}
|
||||
@@ -46,7 +46,7 @@ join_array_assignments_2: {
|
||||
}
|
||||
input: {
|
||||
console.log(function () {
|
||||
var a = ["foo"];
|
||||
var a = [ "foo" ];
|
||||
a[1] = "bar";
|
||||
a[7] = "baz";
|
||||
a[2] = "moo";
|
||||
@@ -55,7 +55,7 @@ join_array_assignments_2: {
|
||||
}
|
||||
expect: {
|
||||
console.log(function () {
|
||||
var a = ["foo", "bar"];
|
||||
var a = [ "foo", "bar" ];
|
||||
a[7] = "baz";
|
||||
a[2] = "moo";
|
||||
return a;
|
||||
@@ -71,7 +71,7 @@ join_array_assignments_3: {
|
||||
}
|
||||
input: {
|
||||
console.log(function () {
|
||||
var a = ["foo"];
|
||||
var a = [ "foo" ];
|
||||
a[1] = "bar";
|
||||
a.b = "baz";
|
||||
a[2] = "moo";
|
||||
@@ -80,7 +80,7 @@ join_array_assignments_3: {
|
||||
}
|
||||
expect: {
|
||||
console.log(function () {
|
||||
var a = ["foo", "bar"];
|
||||
var a = [ "foo", "bar" ];
|
||||
a.b = "baz";
|
||||
a[2] = "moo";
|
||||
return a;
|
||||
@@ -97,7 +97,7 @@ join_array_assignments_4: {
|
||||
}
|
||||
input: {
|
||||
console.log(function () {
|
||||
var a = ["foo"];
|
||||
var a = [ "foo" ];
|
||||
a[0] = "bar";
|
||||
a[1] = a;
|
||||
a[2] = "baz";
|
||||
@@ -106,7 +106,7 @@ join_array_assignments_4: {
|
||||
}
|
||||
expect: {
|
||||
console.log(function () {
|
||||
var a = ["bar"];
|
||||
var a = [ "bar" ];
|
||||
a[1] = a;
|
||||
a[2] = "baz";
|
||||
return a;
|
||||
@@ -1508,3 +1508,22 @@ issue_5831: {
|
||||
}
|
||||
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"
|
||||
}
|
||||
|
||||
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