clean up AST_Binary optimisation logic (#3458)
This commit is contained in:
@@ -5696,7 +5696,8 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (compressor.option("booleans") && compressor.in_boolean_context()) switch (self.operator) {
|
var in_bool = compressor.option("booleans") && compressor.in_boolean_context();
|
||||||
|
if (in_bool) switch (self.operator) {
|
||||||
case "+":
|
case "+":
|
||||||
var ll = self.left.evaluate(compressor);
|
var ll = self.left.evaluate(compressor);
|
||||||
var rr = self.right.evaluate(compressor);
|
var rr = self.right.evaluate(compressor);
|
||||||
@@ -5729,9 +5730,9 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
var parent = compressor.parent();
|
||||||
if (compressor.option("comparisons") && self.is_boolean(compressor)) {
|
if (compressor.option("comparisons") && self.is_boolean(compressor)) {
|
||||||
if (!(compressor.parent() instanceof AST_Binary)
|
if (!(parent instanceof AST_Binary) || parent instanceof AST_Assign) {
|
||||||
|| compressor.parent() instanceof AST_Assign) {
|
|
||||||
var negated = make_node(AST_UnaryPrefix, self, {
|
var negated = make_node(AST_UnaryPrefix, self, {
|
||||||
operator: "!",
|
operator: "!",
|
||||||
expression: self.negate(compressor, first_in_statement(compressor))
|
expression: self.negate(compressor, first_in_statement(compressor))
|
||||||
@@ -5769,14 +5770,14 @@ merge(Compressor.prototype, {
|
|||||||
var ll = fuzzy_eval(self.left);
|
var ll = fuzzy_eval(self.left);
|
||||||
if (!ll) {
|
if (!ll) {
|
||||||
AST_Node.warn("Condition left of && always false [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Condition left of && always false [{file}:{line},{col}]", self.start);
|
||||||
return maintain_this_binding(compressor, compressor.parent(), compressor.self(), self.left).optimize(compressor);
|
return maintain_this_binding(compressor, parent, compressor.self(), self.left).optimize(compressor);
|
||||||
} else if (!(ll instanceof AST_Node)) {
|
} else if (!(ll instanceof AST_Node)) {
|
||||||
AST_Node.warn("Condition left of && always true [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Condition left of && always true [{file}:{line},{col}]", self.start);
|
||||||
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
|
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
|
||||||
}
|
}
|
||||||
var rr = self.right.evaluate(compressor);
|
var rr = self.right.evaluate(compressor);
|
||||||
if (!rr) {
|
if (!rr) {
|
||||||
if (compressor.option("booleans") && compressor.in_boolean_context()) {
|
if (in_bool) {
|
||||||
AST_Node.warn("Boolean && always false [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Boolean && always false [{file}:{line},{col}]", self.start);
|
||||||
return make_sequence(self, [
|
return make_sequence(self, [
|
||||||
self.left,
|
self.left,
|
||||||
@@ -5784,9 +5785,7 @@ merge(Compressor.prototype, {
|
|||||||
]).optimize(compressor);
|
]).optimize(compressor);
|
||||||
} else self.falsy = true;
|
} else self.falsy = true;
|
||||||
} else if (!(rr instanceof AST_Node)) {
|
} else if (!(rr instanceof AST_Node)) {
|
||||||
var parent = compressor.parent();
|
if (in_bool || parent.operator == "&&" && parent.left === compressor.self()) {
|
||||||
if (parent.operator == "&&" && parent.left === compressor.self()
|
|
||||||
|| compressor.option("booleans") && compressor.in_boolean_context()) {
|
|
||||||
AST_Node.warn("Dropping side-effect-free && [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Dropping side-effect-free && [{file}:{line},{col}]", self.start);
|
||||||
return self.left.optimize(compressor);
|
return self.left.optimize(compressor);
|
||||||
}
|
}
|
||||||
@@ -5808,18 +5807,16 @@ merge(Compressor.prototype, {
|
|||||||
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
|
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
|
||||||
} else if (!(ll instanceof AST_Node)) {
|
} else if (!(ll instanceof AST_Node)) {
|
||||||
AST_Node.warn("Condition left of || always true [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Condition left of || always true [{file}:{line},{col}]", self.start);
|
||||||
return maintain_this_binding(compressor, compressor.parent(), compressor.self(), self.left).optimize(compressor);
|
return maintain_this_binding(compressor, parent, compressor.self(), self.left).optimize(compressor);
|
||||||
}
|
}
|
||||||
var rr = self.right.evaluate(compressor);
|
var rr = self.right.evaluate(compressor);
|
||||||
if (!rr) {
|
if (!rr) {
|
||||||
var parent = compressor.parent();
|
if (in_bool || parent.operator == "||" && parent.left === compressor.self()) {
|
||||||
if (parent.operator == "||" && parent.left === compressor.self()
|
|
||||||
|| compressor.option("booleans") && compressor.in_boolean_context()) {
|
|
||||||
AST_Node.warn("Dropping side-effect-free || [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Dropping side-effect-free || [{file}:{line},{col}]", self.start);
|
||||||
return self.left.optimize(compressor);
|
return self.left.optimize(compressor);
|
||||||
}
|
}
|
||||||
} else if (!(rr instanceof AST_Node)) {
|
} else if (!(rr instanceof AST_Node)) {
|
||||||
if (compressor.option("booleans") && compressor.in_boolean_context()) {
|
if (in_bool) {
|
||||||
AST_Node.warn("Boolean || always true [{file}:{line},{col}]", self.start);
|
AST_Node.warn("Boolean || always true [{file}:{line},{col}]", self.start);
|
||||||
return make_sequence(self, [
|
return make_sequence(self, [
|
||||||
self.left,
|
self.left,
|
||||||
@@ -6017,12 +6014,11 @@ merge(Compressor.prototype, {
|
|||||||
}
|
}
|
||||||
if (compressor.option("unsafe")) {
|
if (compressor.option("unsafe")) {
|
||||||
var indexRight = is_indexFn(self.right);
|
var indexRight = is_indexFn(self.right);
|
||||||
if (compressor.option("booleans")
|
if (in_bool
|
||||||
&& indexRight
|
&& indexRight
|
||||||
&& (self.operator == "==" || self.operator == "!=")
|
&& (self.operator == "==" || self.operator == "!=")
|
||||||
&& self.left instanceof AST_Number
|
&& self.left instanceof AST_Number
|
||||||
&& self.left.getValue() == 0
|
&& self.left.getValue() == 0) {
|
||||||
&& compressor.in_boolean_context()) {
|
|
||||||
return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, {
|
return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, {
|
||||||
operator: "!",
|
operator: "!",
|
||||||
expression: self.right
|
expression: self.right
|
||||||
|
|||||||
Reference in New Issue
Block a user