improve AST_For.init & AST_Switch.expression compression (#2546)
This commit is contained in:
@@ -1436,7 +1436,7 @@ merge(Compressor.prototype, {
|
||||
if (!abort) {
|
||||
if (stat.init) stat.init = cons_seq(stat.init);
|
||||
else {
|
||||
stat.init = prev.body.drop_side_effect_free(compressor);
|
||||
stat.init = prev.body;
|
||||
n--;
|
||||
}
|
||||
}
|
||||
@@ -3105,6 +3105,9 @@ merge(Compressor.prototype, {
|
||||
|
||||
OPT(AST_For, function(self, compressor){
|
||||
if (!compressor.option("loops")) return self;
|
||||
if (compressor.option("side_effects") && self.init) {
|
||||
self.init = self.init.drop_side_effect_free(compressor);
|
||||
}
|
||||
if (self.condition) {
|
||||
var cond = self.condition.evaluate(compressor);
|
||||
if (!(cond instanceof AST_Node)) {
|
||||
@@ -3286,11 +3289,15 @@ merge(Compressor.prototype, {
|
||||
if (!compressor.option("switches")) return self;
|
||||
var branch;
|
||||
var value = self.expression.evaluate(compressor);
|
||||
if (value !== self.expression) {
|
||||
var expression = make_node_from_constant(value, self.expression).transform(compressor);
|
||||
self.expression = best_of_expression(expression, self.expression);
|
||||
if (!(value instanceof AST_Node)) {
|
||||
var orig = self.expression;
|
||||
self.expression = make_node_from_constant(value, orig);
|
||||
self.expression = best_of_expression(self.expression.transform(compressor), orig);
|
||||
}
|
||||
if (!compressor.option("dead_code")) return self;
|
||||
if (value instanceof AST_Node) {
|
||||
value = self.expression.tail_node().evaluate(compressor);
|
||||
}
|
||||
var decl = [];
|
||||
var body = [];
|
||||
var default_branch;
|
||||
@@ -3303,7 +3310,7 @@ merge(Compressor.prototype, {
|
||||
} else {
|
||||
eliminate_branch(branch, body[body.length - 1]);
|
||||
}
|
||||
} else if (value !== self.expression) {
|
||||
} else if (!(value instanceof AST_Node)) {
|
||||
var exp = branch.expression.evaluate(compressor);
|
||||
if (exp === value) {
|
||||
exact_match = branch;
|
||||
|
||||
Reference in New Issue
Block a user