}
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 "+":
var ll = self.left.evaluate(compressor);
var rr = self.right.evaluate(compressor);
}
break;
}
+ var parent = compressor.parent();
if (compressor.option("comparisons") && self.is_boolean(compressor)) {
- if (!(compressor.parent() instanceof AST_Binary)
- || compressor.parent() instanceof AST_Assign) {
+ if (!(parent instanceof AST_Binary) || parent instanceof AST_Assign) {
var negated = make_node(AST_UnaryPrefix, self, {
operator: "!",
expression: self.negate(compressor, first_in_statement(compressor))
var ll = fuzzy_eval(self.left);
if (!ll) {
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)) {
AST_Node.warn("Condition left of && always true [{file}:{line},{col}]", self.start);
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
}
var rr = self.right.evaluate(compressor);
if (!rr) {
- if (compressor.option("booleans") && compressor.in_boolean_context()) {
+ if (in_bool) {
AST_Node.warn("Boolean && always false [{file}:{line},{col}]", self.start);
return make_sequence(self, [
self.left,
]).optimize(compressor);
} else self.falsy = true;
} else if (!(rr instanceof AST_Node)) {
- var parent = compressor.parent();
- if (parent.operator == "&&" && parent.left === compressor.self()
- || compressor.option("booleans") && compressor.in_boolean_context()) {
+ if (in_bool || parent.operator == "&&" && parent.left === compressor.self()) {
AST_Node.warn("Dropping side-effect-free && [{file}:{line},{col}]", self.start);
return self.left.optimize(compressor);
}
return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
} else if (!(ll instanceof AST_Node)) {
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);
if (!rr) {
- var parent = compressor.parent();
- if (parent.operator == "||" && parent.left === compressor.self()
- || compressor.option("booleans") && compressor.in_boolean_context()) {
+ if (in_bool || parent.operator == "||" && parent.left === compressor.self()) {
AST_Node.warn("Dropping side-effect-free || [{file}:{line},{col}]", self.start);
return self.left.optimize(compressor);
}
} 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);
return make_sequence(self, [
self.left,
}
if (compressor.option("unsafe")) {
var indexRight = is_indexFn(self.right);
- if (compressor.option("booleans")
+ if (in_bool
&& indexRight
&& (self.operator == "==" || self.operator == "!=")
&& self.left instanceof AST_Number
- && self.left.getValue() == 0
- && compressor.in_boolean_context()) {
+ && self.left.getValue() == 0) {
return (self.operator == "==" ? make_node(AST_UnaryPrefix, self, {
operator: "!",
expression: self.right