enhance conditionals (#3557)

This commit is contained in:
Alex Lam S.L
2019-10-31 09:33:46 +08:00
committed by GitHub
parent 1858c2018c
commit 3797458365
2 changed files with 28 additions and 8 deletions

View File

@@ -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

View File

@@ -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,