optimize elements in array literal before spread
This commit is contained in:
parent
42d59bc8db
commit
850ab84495
|
|
@ -5000,9 +5000,7 @@ merge(Compressor.prototype, {
|
||||||
var flatten = true;
|
var flatten = true;
|
||||||
var values = [];
|
var values = [];
|
||||||
for (var i = elements.length; --i > index;) {
|
for (var i = elements.length; --i > index;) {
|
||||||
var value = elements[i];
|
var value = elements[i].drop_side_effect_free(compressor);
|
||||||
if (value instanceof AST_Expansion) break FLATTEN;
|
|
||||||
var value = value.drop_side_effect_free(compressor);
|
|
||||||
if (value) {
|
if (value) {
|
||||||
values.unshift(value);
|
values.unshift(value);
|
||||||
if (flatten && value.has_side_effects(compressor)) flatten = false;
|
if (flatten && value.has_side_effects(compressor)) flatten = false;
|
||||||
|
|
|
||||||
|
|
@ -1009,7 +1009,7 @@ array_literal_with_spread_2: {
|
||||||
}
|
}
|
||||||
expect: {
|
expect: {
|
||||||
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ]["length"]);
|
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ]["length"]);
|
||||||
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][0]);
|
console.log(10);
|
||||||
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][1]);
|
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][1]);
|
||||||
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][2]);
|
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][2]);
|
||||||
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][3]);
|
console.log([ 10, ...[], 20, ...[ 30, 40 ], 50 ][3]);
|
||||||
|
|
@ -1059,12 +1059,12 @@ array_literal_with_spread_3: {
|
||||||
console.log([...[], 10, 20][1]);
|
console.log([...[], 10, 20][1]);
|
||||||
console.log([...[], 10, 20][2]);
|
console.log([...[], 10, 20][2]);
|
||||||
|
|
||||||
console.log([10, ...[], 20][0]);
|
console.log(10);
|
||||||
console.log([10, ...[], 20][1]);
|
console.log([10, ...[], 20][1]);
|
||||||
console.log([10, ...[], 20][2]);
|
console.log([10, ...[], 20][2]);
|
||||||
|
|
||||||
console.log([10, 20, ...[]][0]);
|
console.log(10);
|
||||||
console.log([10, 20, ...[]][1]);
|
console.log(20);
|
||||||
console.log([10, 20, ...[]][2]);
|
console.log([10, 20, ...[]][2]);
|
||||||
}
|
}
|
||||||
expect_stdout: [
|
expect_stdout: [
|
||||||
|
|
@ -1083,3 +1083,72 @@ array_literal_with_spread_3: {
|
||||||
]
|
]
|
||||||
node_version: ">=6"
|
node_version: ">=6"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
array_literal_with_spread_4: {
|
||||||
|
options = {
|
||||||
|
properties: true,
|
||||||
|
side_effects: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
function t(x) {
|
||||||
|
console.log("(" + x + ")");
|
||||||
|
return 10 * x;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log([t(1), t(2)][0]);
|
||||||
|
console.log([t(1), t(2)][1]);
|
||||||
|
console.log([t(1), t(2)][2]);
|
||||||
|
|
||||||
|
console.log([...[], t(1), t(2)][0]);
|
||||||
|
console.log([...[], t(1), t(2)][1]);
|
||||||
|
console.log([...[], t(1), t(2)][2]);
|
||||||
|
|
||||||
|
console.log([t(1), ...[], t(2)][0]);
|
||||||
|
console.log([t(1), ...[], t(2)][1]);
|
||||||
|
console.log([t(1), ...[], t(2)][2]);
|
||||||
|
|
||||||
|
console.log([t(1), t(2), ...[]][0]);
|
||||||
|
console.log([t(1), t(2), ...[]][1]);
|
||||||
|
console.log([t(1), t(2), ...[]][2]);
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
function t(x) {
|
||||||
|
console.log("(" + x + ")");
|
||||||
|
return 10 * x;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log([ t(1), t(2) ][0]);
|
||||||
|
console.log((t(1), t(2)));
|
||||||
|
console.log([ t(1), t(2) ][2]);
|
||||||
|
|
||||||
|
console.log([ ...[], t(1), t(2) ][0]);
|
||||||
|
console.log([ ...[], t(1), t(2) ][1]);
|
||||||
|
console.log([ ...[], t(1), t(2) ][2]);
|
||||||
|
|
||||||
|
console.log([ t(1), t(2) ][0]);
|
||||||
|
console.log([ t(1), ...[], t(2) ][1]);
|
||||||
|
console.log([ t(1), ...[], t(2) ][2]);
|
||||||
|
|
||||||
|
console.log([ t(1), t(2) ][0]);
|
||||||
|
console.log((t(1), t(2)));
|
||||||
|
console.log([ t(1), t(2), ...[] ][2]);
|
||||||
|
}
|
||||||
|
expect_stdout: [
|
||||||
|
"(1)", "(2)", "10",
|
||||||
|
"(1)", "(2)", "20",
|
||||||
|
"(1)", "(2)", "undefined",
|
||||||
|
|
||||||
|
"(1)", "(2)", "10",
|
||||||
|
"(1)", "(2)", "20",
|
||||||
|
"(1)", "(2)", "undefined",
|
||||||
|
|
||||||
|
"(1)", "(2)", "10",
|
||||||
|
"(1)", "(2)", "20",
|
||||||
|
"(1)", "(2)", "undefined",
|
||||||
|
|
||||||
|
"(1)", "(2)", "10",
|
||||||
|
"(1)", "(2)", "20",
|
||||||
|
"(1)", "(2)", "undefined",
|
||||||
|
]
|
||||||
|
node_version: ">=6"
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user