From 22a09ea7c599e2618ee933ed56ca165a3d2d663b Mon Sep 17 00:00:00 2001 From: "Alex Lam S.L" Date: Tue, 29 Oct 2019 17:06:57 +0800 Subject: fix corner case in `unsafe_math` (#3548) fixes #3547 --- lib/compress.js | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/compress.js b/lib/compress.js index 3058b678..d37108d1 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -6024,9 +6024,12 @@ merge(Compressor.prototype, { if (self.right instanceof AST_Constant && self.left instanceof AST_Binary && self.left.operator != "%" - && PRECEDENCE[self.left.operator] == PRECEDENCE[self.operator]) { + && PRECEDENCE[self.left.operator] == PRECEDENCE[self.operator] + && self.left.is_number(compressor)) { if (self.left.left instanceof AST_Constant - && (self.left.operator != "+" || self.left.right.is_number(compressor))) { + && (self.operator != "+" + || self.left.left.is_boolean(compressor) + || self.left.left.is_number(compressor))) { self = make_node(AST_Binary, self, { operator: self.left.operator, left: make_node(AST_Binary, self.left, { @@ -6038,19 +6041,23 @@ merge(Compressor.prototype, { }), right: self.left.right }); - } else if (self.left.right instanceof AST_Constant - && (self.left.operator != "+" || self.left.left.is_number(compressor))) { - self = make_node(AST_Binary, self, { - operator: self.left.operator, - left: self.left.left, - right: make_node(AST_Binary, self.left, { - operator: align(self.left.operator, self.operator), - left: self.left.right, - right: self.right, - start: self.left.right.start, - end: self.right.end - }) - }); + } else if (self.left.right instanceof AST_Constant) { + var op = align(self.left.operator, self.operator); + if (op != "+" + || self.left.right.is_boolean(compressor) + || self.left.right.is_number(compressor)) { + self = make_node(AST_Binary, self, { + operator: self.left.operator, + left: self.left.left, + right: make_node(AST_Binary, self.left, { + operator: op, + left: self.left.right, + right: self.right, + start: self.left.right.start, + end: self.right.end + }) + }); + } } } break; -- cgit v1.2.3