From: Alex Lam S.L Date: Fri, 1 Dec 2017 04:52:36 +0000 (+0800) Subject: convert to number under boolean context (#2545) X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=09b320e8a5ec85410bf323573b76f2da7e08e2ee;p=UglifyJS.git convert to number under boolean context (#2545) --- diff --git a/lib/compress.js b/lib/compress.js index 395c4ed0..8b2951d8 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -4699,6 +4699,9 @@ merge(Compressor.prototype, { }); OPT(AST_Boolean, function(self, compressor){ + if (compressor.in_boolean_context()) return make_node(AST_Number, self, { + value: +self.value + }); if (compressor.option("booleans")) { var p = compressor.parent(); if (p instanceof AST_Binary && (p.operator == "==" diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js index 9cb27fa5..22947d86 100644 --- a/test/compress/conditionals.js +++ b/test/compress/conditionals.js @@ -1037,10 +1037,10 @@ issue_2535: { expect: { y(); x() && y(); - (x(), 0) || y(); + (x(), 1) && y(); x() && y(); x() && y(); x() && y(); - (x(), 1) || y(); + (x(), 0) && y(); } } diff --git a/test/compress/issue-1639.js b/test/compress/issue-1639.js index b6a9647f..fc3db983 100644 --- a/test/compress/issue-1639.js +++ b/test/compress/issue-1639.js @@ -26,7 +26,7 @@ issue_1639_1: { } expect: { for (var a = 100, b = 10, L1 = 5; --L1 > 0;) - if (--b, !1) var ignore = 0; + if (--b, 0) var ignore = 0; console.log(a, b); } expect_stdout: true @@ -57,7 +57,7 @@ issue_1639_2: { expect: { var a = 100, b = 10; function f19() { - ++a, 1; + ++a, 0; } f19(), console.log(a, b); diff --git a/test/compress/issue-637.js b/test/compress/issue-637.js index 45fd2481..ed42cb8e 100644 --- a/test/compress/issue-637.js +++ b/test/compress/issue-637.js @@ -17,6 +17,6 @@ wrongly_optimized: { foo(); } // TODO: optimize to `func(), bar()` - (func(), 0) || bar(); + (func(), 1) && bar(); } } diff --git a/test/compress/issue-640.js b/test/compress/issue-640.js index c9a68dc9..784092c8 100644 --- a/test/compress/issue-640.js +++ b/test/compress/issue-640.js @@ -100,7 +100,7 @@ wrongly_optimized: { foo(); } // TODO: optimize to `func(), bar()` - if (func(), !0) bar(); + if (func(), 1) bar(); } } diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js index bcfa7b35..4a098f78 100644 --- a/test/compress/reduce_vars.js +++ b/test/compress/reduce_vars.js @@ -2347,7 +2347,7 @@ booleans: { } expect: { console.log(function(a) { - if (!1); + if (0); switch (!1) { case 0: return "FAIL"; diff --git a/test/compress/transform.js b/test/compress/transform.js index 1e21da5b..68d33844 100644 --- a/test/compress/transform.js +++ b/test/compress/transform.js @@ -45,9 +45,9 @@ condition_evaluate: { if (void 0 == null); } expect: { - while (!1); - for (; !0;); - if (!0); + while (0); + for (; 1;); + if (1); } } diff --git a/test/compress/typeof.js b/test/compress/typeof.js index 60f3d1d0..34949fbe 100644 --- a/test/compress/typeof.js +++ b/test/compress/typeof.js @@ -44,7 +44,7 @@ typeof_in_boolean_context: { function f2() { return g(), "Yes"; } foo(); console.log(1); - var a = !(console.log(2), !0); + var a = !(console.log(2), 1); foo(); } } @@ -57,6 +57,6 @@ issue_1668: { if (typeof bar); } expect: { - if (!0); + if (1); } }