Skip to content

Commit 9b82f9b

Browse files
authored
fix corner case in unused (#5101)
fixes #5100
1 parent 657d525 commit 9b82f9b

File tree

2 files changed

+71
-6
lines changed

2 files changed

+71
-6
lines changed

lib/compress.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7301,12 +7301,11 @@ merge(Compressor.prototype, {
73017301
if (value === null) {
73027302
value = make_node(AST_Number, node, { value: 0 });
73037303
} else if (value) {
7304-
if (value.may_throw_on_access(compressor, true)) value = make_sequence(node, [
7305-
value,
7306-
make_node(AST_Number, node, { value: 0 }),
7307-
]);
7308-
} else if (node instanceof AST_DestructuredArray) {
7309-
return make_node(AST_DestructuredArray, node, { elements: [] });
7304+
if (value.tail_node().write_only === true || value.may_throw_on_access(compressor, true)) {
7305+
value = make_node(AST_Array, node, {
7306+
elements: value instanceof AST_Sequence ? value.expressions : [ value ],
7307+
});
7308+
}
73107309
}
73117310
return make_node(AST_DestructuredObject, node, { properties: [] });
73127311
}

test/compress/rests.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,3 +1003,69 @@ issue_5089_2: {
10031003
expect_stdout: "undefined"
10041004
node_version: ">=8"
10051005
}
1006+
1007+
issue_5100_1: {
1008+
options = {
1009+
passes: 2,
1010+
pure_getters: "strict",
1011+
side_effects: true,
1012+
unused: true,
1013+
}
1014+
input: {
1015+
var a;
1016+
[ {
1017+
p: {},
1018+
...a
1019+
} ] = [ {
1020+
p: {
1021+
q: a,
1022+
} = 42,
1023+
r: "PASS",
1024+
} ];
1025+
console.log(a.r);
1026+
}
1027+
expect: {
1028+
var a;
1029+
[ {
1030+
p: {},
1031+
...a
1032+
} ] = [ {
1033+
p: [ a = 42["q"] ],
1034+
r: "PASS",
1035+
} ];
1036+
console.log(a.r);
1037+
}
1038+
expect_stdout: "PASS"
1039+
node_version: ">=8"
1040+
}
1041+
1042+
issue_5100_2: {
1043+
options = {
1044+
passes: 2,
1045+
pure_getters: "strict",
1046+
side_effects: true,
1047+
unused: true,
1048+
}
1049+
input: {
1050+
var a;
1051+
[ {
1052+
p: {},
1053+
...a
1054+
} ] = [ {
1055+
p: (console.log("PASS"), {
1056+
q: a,
1057+
} = 42),
1058+
} ];
1059+
}
1060+
expect: {
1061+
var a;
1062+
[ {
1063+
p: {},
1064+
...a
1065+
} ] = [ {
1066+
p: [ console.log("PASS"), a = 42["q"] ],
1067+
} ];
1068+
}
1069+
expect_stdout: "PASS"
1070+
node_version: ">=10"
1071+
}

0 commit comments

Comments
 (0)