From bc49dfd27a800cfa2070464c236a1d56ed30bfca Mon Sep 17 00:00:00 2001 From: Richard van Velzen Date: Wed, 18 May 2016 18:49:55 +0200 Subject: [PATCH] Completely allow evaluating -0 --- lib/compress.js | 20 +++++++++++++------- test/compress/evaluate.js | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 9 deletions(-) diff --git a/lib/compress.js b/lib/compress.js index e8c42c04..419c6a25 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -183,9 +183,18 @@ merge(Compressor.prototype, { value: val }).optimize(compressor); case "number": - return make_node(isNaN(val) ? AST_NaN : AST_Number, orig, { - value: val - }).optimize(compressor); + if (isNaN(val)) { + return make_node(AST_NaN, orig); + } + + if ((1 / val) < 0) { + return make_node(AST_UnaryPrefix, orig, { + operator: "-", + expression: make_node(AST_Number, null, { value: -val }) + }); + } + + return make_node(AST_Number, orig, { value: val }).optimize(compressor); case "boolean": return make_node(val ? AST_True : AST_False, orig).optimize(compressor); case "undefined": @@ -1028,10 +1037,7 @@ merge(Compressor.prototype, { return typeof e; case "void": return void ev(e, compressor); case "~": return ~ev(e, compressor); - case "-": - e = -ev(e, compressor); - if (e === -0) throw def; - return e; + case "-": return -ev(e, compressor); case "+": return +ev(e, compressor); } throw def; diff --git a/test/compress/evaluate.js b/test/compress/evaluate.js index 9aa6b3d3..d27582f3 100644 --- a/test/compress/evaluate.js +++ b/test/compress/evaluate.js @@ -1,9 +1,39 @@ negative_zero: { options = { evaluate: true } input: { - assert.sameValue(-"", -0, '-""'); + console.log( + -"", + - -"", + 1 / (-0), + 1 / (-"") + ); } expect: { - assert.sameValue(-"", -0, '-""'); + console.log( + -0, + 0, + 1 / (-0), + 1 / (-0) + ); + } +} + +positive_zero: { + options = { evaluate: true } + input: { + console.log( + +"", + + -"", + 1 / (+0), + 1 / (+"") + ); + } + expect: { + console.log( + 0, + -0, + 1 / (0), + 1 / (0) + ); } } -- 2.34.1