aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compress.js7
-rw-r--r--test/compress/numbers.js34
2 files changed, 41 insertions, 0 deletions
diff --git a/lib/compress.js b/lib/compress.js
index be760152..ac7ea357 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -3034,6 +3034,13 @@ merge(Compressor.prototype, {
})).optimize(compressor);
}
}
+ if (e instanceof AST_Binary
+ && (self.operator == "+" || self.operator == "-")
+ && (e.operator == "*" || e.operator == "/" || e.operator == "%")) {
+ self.expression = e.left;
+ e.left = self;
+ return e.optimize(compressor);
+ }
// avoids infinite recursion of numerals
if (self.operator != "-"
|| !(self.expression instanceof AST_Number
diff --git a/test/compress/numbers.js b/test/compress/numbers.js
index ea439ecc..946a7f2d 100644
--- a/test/compress/numbers.js
+++ b/test/compress/numbers.js
@@ -168,3 +168,37 @@ issue_1710: {
}
expect_stdout: true
}
+
+unary_binary_parenthesis: {
+ input: {
+ var v = [ 0, 1, NaN, Infinity, null, undefined, true, false, "", "foo", /foo/ ];
+ v.forEach(function(x) {
+ v.forEach(function(y) {
+ console.log(
+ +(x*y),
+ +(x/y),
+ +(x%y),
+ -(x*y),
+ -(x/y),
+ -(x%y)
+ );
+ });
+ });
+ }
+ expect: {
+ var v = [ 0, 1, 0/0, 1/0, null, void 0, true, false, "", "foo", /foo/ ];
+ v.forEach(function(x) {
+ v.forEach(function(y) {
+ console.log(
+ +x*y,
+ +x/y,
+ +x%y,
+ -x*y,
+ -x/y,
+ -x%y
+ );
+ });
+ });
+ }
+ expect_stdout: true
+}