From 379745836510c23ac980a3c28f6754181aba12b9 Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Thu, 31 Oct 2019 09:33:46 +0800 Subject: [PATCH] enhance `conditionals` (#3557) --- lib/compress.js | 18 ++++++++++-------- test/compress/conditionals.js | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 8 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index 9e2b6895..a6f5d20b 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4665,11 +4665,6 @@ merge(Compressor.prototype, { self.body = self.alternative || make_node(AST_EmptyStatement, self); self.alternative = tmp; } - if (is_empty(self.body) && is_empty(self.alternative)) { - return make_node(AST_SimpleStatement, self.condition, { - body: self.condition.clone() - }).optimize(compressor); - } if (self.body instanceof AST_SimpleStatement && self.alternative instanceof AST_SimpleStatement) { return make_node(AST_SimpleStatement, self, { @@ -4703,15 +4698,22 @@ merge(Compressor.prototype, { }).transform(compressor) }).optimize(compressor); } - if (self.body instanceof AST_EmptyStatement - && self.alternative instanceof AST_SimpleStatement) { - return make_node(AST_SimpleStatement, self, { + if (is_empty(self.body)) { + if (is_empty(self.alternative)) return make_node(AST_SimpleStatement, self.condition, { + body: self.condition.clone() + }).optimize(compressor); + if (self.alternative instanceof AST_SimpleStatement) return make_node(AST_SimpleStatement, self, { body: make_node(AST_Binary, self, { operator : "||", left : self.condition, right : self.alternative.body }).transform(compressor) }).optimize(compressor); + self = make_node(AST_If, self, { + condition: negated, + body: self.alternative, + alternative: null + }); } if (self.body instanceof AST_Exit && self.alternative instanceof AST_Exit diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index 594d956d..27536b9f 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -161,6 +161,24 @@ ifs_6: { } } +ifs_7: { + options = { + conditionals: true, + } + input: { + if (A); else; + if (A) while (B); else; + if (A); else while (C); + if (A) while (B); else while (C); + } + expect: { + A; + if (A) while (B); + if (!A) while (C); + if (A) while (B); else while (C); + } +} + cond_1: { options = { conditionals: true, -- 2.34.1