speed up equivalent_to() and AST_Switch (#1727)

This commit is contained in:
Alex Lam S.L
2017-03-29 22:08:26 +08:00
committed by GitHub
parent 2e41cd6394
commit f1a833a7aa

View File

@@ -196,8 +196,7 @@ merge(Compressor.prototype, {
});
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) {
@@ -2518,7 +2517,6 @@ merge(Compressor.prototype, {
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;
@@ -2547,14 +2545,16 @@ merge(Compressor.prototype, {
}
}
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;
}
}