aboutsummaryrefslogtreecommitdiff
path: root/lib/compress.js
diff options
context:
space:
mode:
authorAlex Lam S.L <alexlamsl@gmail.com>2017-12-01 12:53:59 +0800
committerGitHub <noreply@github.com>2017-12-01 12:53:59 +0800
commitf6610baaa8c5c6acf8f4a52babf68d0439aead1f (patch)
tree8a109dc1f39ae6cbfbbd10017acff212f3a86016 /lib/compress.js
parent09b320e8a5ec85410bf323573b76f2da7e08e2ee (diff)
downloadtracifyjs-f6610baaa8c5c6acf8f4a52babf68d0439aead1f.tar.gz
tracifyjs-f6610baaa8c5c6acf8f4a52babf68d0439aead1f.zip
improve `AST_For.init` & `AST_Switch.expression` compression (#2546)
Diffstat (limited to 'lib/compress.js')
-rw-r--r--lib/compress.js17
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/compress.js b/lib/compress.js
index 8b2951d8..dfee94fc 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -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;