more efficient to check option and operator only once

This commit is contained in:
Dan Wolff 2018-02-04 22:36:52 +01:00
parent 26f4e5762c
commit 5e76065c9e

View File

@ -4797,6 +4797,7 @@ merge(Compressor.prototype, {
if (compressor.option("comparisons")) switch (self.operator) {
case "===":
case "!==":
var is_strict_comparison = true;
if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
(self.left.is_number(compressor) && self.right.is_number(compressor)) ||
(self.left.is_boolean() && self.right.is_boolean()) ||
@ -4827,6 +4828,11 @@ merge(Compressor.prototype, {
&& is_object(self.left.fixed_value())) {
return make_node(self.operator[0] == "=" ? AST_True : AST_False, self);
}
// void 0 == x => null == x
else if (!is_strict_comparison
&& is_undefined(self.left, compressor)) {
self.left = make_node(AST_Null, self.left);
}
break;
case "&&":
case "||":
@ -4858,12 +4864,6 @@ merge(Compressor.prototype, {
}
break;
}
// void 0 == x => null == x
if (compressor.option("comparisons") &&
(self.operator == "==" || self.operator == "!=") &&
is_undefined(self.left, compressor)) {
self.left = make_node(AST_Null, self.left);
}
if (self.operator == "+" && compressor.in_boolean_context()) {
var ll = self.left.evaluate(compressor);
var rr = self.right.evaluate(compressor);