improve switch case compression (#2547)

This commit is contained in:
Alex Lam S.L
2017-12-01 14:32:00 +08:00
committed by GitHub
parent f6610baaa8
commit 7ac6fdcc99
3 changed files with 42 additions and 9 deletions

View File

@@ -3312,6 +3312,11 @@ merge(Compressor.prototype, {
}
} else if (!(value instanceof AST_Node)) {
var exp = branch.expression.evaluate(compressor);
if (!(exp instanceof AST_Node) && exp !== value) {
eliminate_branch(branch, body[body.length - 1]);
continue;
}
if (exp instanceof AST_Node) exp = branch.expression.tail_node().evaluate(compressor);
if (exp === value) {
exact_match = branch;
if (default_branch) {
@@ -3320,9 +3325,6 @@ merge(Compressor.prototype, {
eliminate_branch(default_branch, body[default_index - 1]);
default_branch = null;
}
} else if (exp !== branch.expression) {
eliminate_branch(branch, body[body.length - 1]);
continue;
}
}
if (aborts(branch)) {
@@ -3365,12 +3367,16 @@ merge(Compressor.prototype, {
});
self.walk(tw);
if (!has_break) {
body = body[0].body.slice();
body.unshift(make_node(AST_SimpleStatement, self.expression, {
body: self.expression
var statements = body[0].body.slice();
var exp = body[0].expression;
if (exp) statements.unshift(make_node(AST_SimpleStatement, exp, {
body: exp
}));
statements.unshift(make_node(AST_SimpleStatement, self.expression, {
body:self.expression
}));
return make_node(AST_BlockStatement, self, {
body: body
body: statements
}).optimize(compressor);
}
}