diff options
-rw-r--r-- | lib/compress.js | 7 | ||||
-rw-r--r-- | test/compress/numbers.js | 34 |
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 +} |