aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js18
-rw-r--r--test/compress/conditionals.js18
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,