fix corner case in evaluate (#3654)

fixes #3653
This commit is contained in:
Alex Lam S.L
2019-12-29 02:50:57 +00:00
committed by GitHub
parent 2f3930d1b9
commit af310ba2d0
2 changed files with 68 additions and 19 deletions

View File

@@ -6466,13 +6466,6 @@ merge(Compressor.prototype, {
}).optimize(compressor);
}
break;
// 0 - n => -n
case "-":
if (self.left.value == 0) return make_node(AST_UnaryPrefix, self, {
operator: "-",
expression: self.right
}).optimize(compressor);
break;
// 1 * n => n
case "*":
if (self.left.value == 1) {
@@ -6483,15 +6476,32 @@ merge(Compressor.prototype, {
}
break;
}
// n - 0 => n
// n / 1 => n
if (self.right instanceof AST_Number && !self.left.is_constant() && self.right.value == {
"-": 0,
"/": 1,
}[self.operator]) return self.left.is_number(compressor) ? self.left : make_node(AST_UnaryPrefix, self, {
operator: "+",
expression: self.left
}).optimize(compressor);
if (self.right instanceof AST_Number && !self.left.is_constant()) switch (self.operator) {
// n + 0 => n
case "+":
if (self.right.value == 0 && (self.left.is_boolean(compressor) || self.left.is_number(compressor))) {
return self.left;
}
break;
// n - 0 => n
case "-":
if (self.right.value == 0) {
return self.left.is_number(compressor) ? self.left : make_node(AST_UnaryPrefix, self, {
operator: "+",
expression: self.left
}).optimize(compressor);
}
break;
// n / 1 => n
case "/":
if (self.right.value == 1) {
return self.left.is_number(compressor) ? self.left : make_node(AST_UnaryPrefix, self, {
operator: "+",
expression: self.left
}).optimize(compressor);
}
break;
}
}
if (compressor.option("typeofs")) switch (self.operator) {
case "&&":