});
AST_Node.DEFMETHOD("equivalent_to", function(node){
- // XXX: this is a rather expensive way to test two node's equivalence:
- return this.print_to_string() == node.print_to_string();
+ return this.TYPE == node.TYPE && this.print_to_string() == node.print_to_string();
});
AST_Node.DEFMETHOD("process_expression", function(insert) {
self.expression = best_of_expression(expression, self.expression);
}
if (!compressor.option("dead_code")) return self;
- var prev_block;
var decl = [];
var body = [];
var default_branch;
}
}
if (aborts(branch)) {
- var block = make_node(AST_BlockStatement, branch, branch).print_to_string();
- if (!fallthrough && prev_block === block) body[body.length - 1].body = [];
+ if (body.length > 0 && !fallthrough) {
+ var prev = body[body.length - 1];
+ if (prev.body.length == branch.body.length
+ && make_node(AST_BlockStatement, prev, prev).equivalent_to(make_node(AST_BlockStatement, branch, branch)))
+ prev.body = [];
+ }
body.push(branch);
- prev_block = block;
fallthrough = false;
} else {
body.push(branch);
- prev_block = null;
fallthrough = true;
}
}