fix corner case with NaN (#4437)

fixes #4436
This commit is contained in:
Alex Lam S.L
2020-12-22 23:01:50 +00:00
committed by GitHub
parent f85a206b9e
commit cb4a02949e
2 changed files with 100 additions and 15 deletions

View File

@@ -9297,10 +9297,9 @@ merge(Compressor.prototype, {
OPT(AST_Infinity, function(self, compressor) {
var lhs = is_lhs(compressor.self(), compressor.parent());
if (lhs && is_atomic(lhs, self)) return self;
if (compressor.option("keep_infinity")
&& !(lhs && !is_atomic(lhs, self))
&& !find_scope(compressor).find_variable("Infinity"))
if (compressor.option("keep_infinity") && !lhs && !find_scope(compressor).find_variable("Infinity")) {
return self;
}
return make_node(AST_Binary, self, {
operator: "/",
left: make_node(AST_Number, self, {
@@ -9314,18 +9313,17 @@ merge(Compressor.prototype, {
OPT(AST_NaN, function(self, compressor) {
var lhs = is_lhs(compressor.self(), compressor.parent());
if (lhs && !is_atomic(lhs, self) || find_scope(compressor).find_variable("NaN")) {
return make_node(AST_Binary, self, {
operator: "/",
left: make_node(AST_Number, self, {
value: 0
}),
right: make_node(AST_Number, self, {
value: 0
})
});
}
return self;
if (lhs && is_atomic(lhs, self)) return self;
if (!lhs && !find_scope(compressor).find_variable("NaN")) return self;
return make_node(AST_Binary, self, {
operator: "/",
left: make_node(AST_Number, self, {
value: 0
}),
right: make_node(AST_Number, self, {
value: 0
})
});
});
function is_reachable(self, defs) {

View File

@@ -2037,3 +2037,90 @@ issue_4425: {
expect_stdout: "PASS"
node_version: ">=8"
}
issue_4436_Infinity: {
options = {
unused: true,
}
input: {
console.log(function({
[delete Infinity]: a,
}) {
var Infinity;
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect: {
console.log(function({
[delete Infinity]: a,
}) {
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect_stdout: true
node_version: ">=6"
}
issue_4436_NaN: {
options = {
unused: true,
}
input: {
console.log(function({
[delete NaN]: a,
}) {
var NaN;
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect: {
console.log(function({
[delete NaN]: a,
}) {
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect_stdout: true
node_version: ">=6"
}
issue_4436_undefined: {
options = {
unused: true,
}
input: {
console.log(function({
[delete undefined]: a,
}) {
var undefined;
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect: {
console.log(function({
[delete undefined]: a,
}) {
return a;
}({
true: "FAIL",
false: "PASS",
}));
}
expect_stdout: true
node_version: ">=6"
}