Skip to content

Commit b6b0658

Browse files
authored
fix corner case in dead_code (#5883)
fixes #5882
1 parent 8cfa37e commit b6b0658

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

Diff for: lib/compress.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -13066,10 +13066,11 @@ Compressor.prototype.compress = function(node) {
1306613066
|| !compressor.has_directive("use strict")
1306713067
&& exp instanceof AST_Constant
1306813068
&& !exp.may_throw_on_access(compressor)) {
13069-
return self.left instanceof AST_Dot ? self.right : make_sequence(self, [
13069+
var value = self.left instanceof AST_Dot ? self.right : make_sequence(self, [
1307013070
self.left.property,
13071-
self.right
13072-
]).optimize(compressor);
13071+
self.right,
13072+
]);
13073+
return maintain_this_binding(compressor.parent(), self, value).optimize(compressor);
1307313074
}
1307413075
}
1307513076
} else if (self.left instanceof AST_SymbolRef && can_drop_symbol(self.left, compressor)) {

Diff for: test/compress/dead-code.js

+46
Original file line numberDiff line numberDiff line change
@@ -1730,3 +1730,49 @@ issue_5641: {
17301730
}
17311731
expect_stdout: "PASS"
17321732
}
1733+
1734+
issue_5882_1: {
1735+
options = {
1736+
dead_code: true,
1737+
pure_getters: "strict",
1738+
}
1739+
input: {
1740+
console.log(delete (42..p = NaN));
1741+
}
1742+
expect: {
1743+
console.log(delete (0, NaN));
1744+
}
1745+
expect_stdout: "true"
1746+
}
1747+
1748+
issue_5882_2: {
1749+
options = {
1750+
dead_code: true,
1751+
pure_getters: "strict",
1752+
sequences: true,
1753+
side_effects: true,
1754+
}
1755+
input: {
1756+
console.log(delete (42..p = NaN));
1757+
}
1758+
expect: {
1759+
console.log(delete (0, NaN));
1760+
}
1761+
expect_stdout: "true"
1762+
}
1763+
1764+
issue_5882_3: {
1765+
options = {
1766+
dead_code: true,
1767+
pure_getters: "strict",
1768+
sequences: true,
1769+
side_effects: true,
1770+
}
1771+
input: {
1772+
console.log(delete (42..p = Infinity));
1773+
}
1774+
expect: {
1775+
console.log(delete (1 / 0));
1776+
}
1777+
expect_stdout: "true"
1778+
}

0 commit comments

Comments
 (0)