(function(def) {
def(AST_Node, return_false);
def(AST_Array, return_true);
- def(AST_Assign, function(compressor) {
- return this.operator != "=" || this.right.is_defined(compressor);
- });
- def(AST_Binary, function(compressor) {
- switch (this.operator) {
+ function is_binary_defined(compressor, op, node) {
+ switch (op) {
case "&&":
- return this.left.is_defined(compressor) && this.right.is_defined(compressor);
+ return node.left.is_defined(compressor) && node.right.is_defined(compressor);
case "||":
- return this.left.is_truthy() || this.right.is_defined(compressor);
+ return node.left.is_truthy() || node.right.is_defined(compressor);
case "??":
- return this.left.is_defined(compressor) || this.right.is_defined(compressor);
+ return node.left.is_defined(compressor) || node.right.is_defined(compressor);
default:
return true;
}
+ }
+ def(AST_Assign, function(compressor) {
+ var op = this.operator;
+ if (op == "=") return this.right.is_defined(compressor);
+ return is_binary_defined(compressor, op.slice(0, -1), this);
+ });
+ def(AST_Binary, function(compressor) {
+ return is_binary_defined(compressor, this.operator, this);
});
def(AST_Conditional, function(compressor) {
return this.consequent.is_defined(compressor) && this.alternative.is_defined(compressor);