enhance unsafe_math (#4093)
This commit is contained in:
@@ -7556,13 +7556,15 @@ merge(Compressor.prototype, {
|
|||||||
&& self.left.is_number(compressor)) {
|
&& self.left.is_number(compressor)) {
|
||||||
if (self.left.left instanceof AST_Constant) {
|
if (self.left.left instanceof AST_Constant) {
|
||||||
var lhs = make_binary(self.left, self.operator, self.left.left, self.right, self.left.left.start, self.right.end);
|
var lhs = make_binary(self.left, self.operator, self.left.left, self.right, self.left.left.start, self.right.end);
|
||||||
self = make_binary(self, self.left.operator, lhs, self.left.right);
|
self = make_binary(self, self.left.operator, try_evaluate(compressor, lhs), self.left.right);
|
||||||
} else if (self.left.right instanceof AST_Constant) {
|
} else if (self.left.right instanceof AST_Constant) {
|
||||||
var rhs = make_binary(self.left, align(self.left.operator, self.operator), self.left.right, self.right, self.left.right.start, self.right.end);
|
var op = align(self.left.operator, self.operator);
|
||||||
if (self.left.operator != "-"
|
var rhs = try_evaluate(compressor, make_binary(self.left, op, self.left.right, self.right));
|
||||||
|| !self.right.value
|
if (rhs.is_constant()
|
||||||
|| rhs.evaluate(compressor)
|
&& !(self.left.operator == "-"
|
||||||
|| !self.left.left.is_negative_zero()) {
|
&& self.right.value != 0
|
||||||
|
&& +rhs.value == 0
|
||||||
|
&& self.left.left.is_negative_zero())) {
|
||||||
self = make_binary(self, self.left.operator, self.left.left, rhs);
|
self = make_binary(self, self.left.operator, self.left.left, rhs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -637,6 +637,22 @@ evaluate_7_unsafe_math: {
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
evaluate_8_unsafe_math: {
|
||||||
|
options = {
|
||||||
|
evaluate: true,
|
||||||
|
unsafe_math: true,
|
||||||
|
}
|
||||||
|
input: {
|
||||||
|
var a = [ "42" ];
|
||||||
|
console.log(a * (1 / 7));
|
||||||
|
}
|
||||||
|
expect: {
|
||||||
|
var a = [ "42" ];
|
||||||
|
console.log(+a / 7);
|
||||||
|
}
|
||||||
|
expect_stdout: "6"
|
||||||
|
}
|
||||||
|
|
||||||
NaN_redefined: {
|
NaN_redefined: {
|
||||||
options = {
|
options = {
|
||||||
evaluate: true,
|
evaluate: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user