diff options
author | Alex Lam S.L <alexlamsl@gmail.com> | 2017-12-01 12:53:59 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-01 12:53:59 +0800 |
commit | f6610baaa8c5c6acf8f4a52babf68d0439aead1f (patch) | |
tree | 8a109dc1f39ae6cbfbbd10017acff212f3a86016 /lib/compress.js | |
parent | 09b320e8a5ec85410bf323573b76f2da7e08e2ee (diff) | |
download | tracifyjs-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.js | 17 |
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; |