Skip to content

Commit de13451

Browse files
authored
Fix JS optimizer error on ES6 spread operator (#18461)
fixes #12543
1 parent a6e8d85 commit de13451

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

test/optimizer/JSDCE-output.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,19 @@ function g(a) {
1414

1515
Module["g"] = g;
1616

17+
const sx = {
18+
a: 1
19+
};
20+
21+
const sar = [ 1, 2, 3 ];
22+
23+
Module["spread"] = {
24+
b: 2,
25+
...sx
26+
};
27+
28+
Module["spread2"] = [ ...sar, 4, 5, 6 ];
29+
1730
function h(a) {
1831
return a + 1;
1932
}

test/optimizer/JSDCE.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ function g(a) {
1919
return a+1;
2020
}
2121
Module['g'] = g;
22+
const sx = {a:1};
23+
const sar = [1,2,3];
24+
Module['spread'] = { b:2, ...sx };
25+
Module['spread2'] = [ ...sar, 4, 5, 6 ];
2226

2327
// used
2428
function h(a) {

tools/acorn-optimizer.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,7 @@ function hasSideEffects(node) {
235235
case 'VariableDeclarator':
236236
case 'ObjectExpression':
237237
case 'Property':
238+
case 'SpreadElement':
238239
case 'BlockStatement':
239240
case 'ArrayExpression':
240241
case 'EmptyStatement': {
@@ -399,7 +400,11 @@ function runJSDCE(ast, aggressive) {
399400
ObjectExpression(node, c) {
400401
// ignore the property identifiers
401402
node.properties.forEach(function (node) {
402-
c(node.value);
403+
if (node.value) {
404+
c(node.value);
405+
} else if (node.argument) {
406+
c(node.argument);
407+
}
403408
});
404409
},
405410
MemberExpression(node, c) {

0 commit comments

Comments
 (0)