[Pkg-javascript-commits] [uglifyjs] 411/491: enhance `conditionals` (#2758)

Jonas Smedegaard dr at jones.dk
Wed Feb 14 19:51:58 UTC 2018


This is an automated email from the git hooks/post-receive script.

js pushed a commit to annotated tag debian/3.3.10-1
in repository uglifyjs.

commit 09269be9745ab269acaa320db0abaed67ca06566
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date:   Wed Jan 10 16:59:57 2018 +0800

    enhance `conditionals` (#2758)
    
    `x ? y || z : z` --> `x && y || z`
---
 lib/compress.js               | 14 ++++++++++++++
 test/compress/conditionals.js | 43 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 57 insertions(+)

diff --git a/lib/compress.js b/lib/compress.js
index 406a331..9760c54 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -5278,6 +5278,20 @@ merge(Compressor.prototype, {
                 consequent
             ]).optimize(compressor);
         }
+        // x ? y || z : z --> x && y || z
+        if (consequent instanceof AST_Binary
+            && consequent.operator == "||"
+            && consequent.right.equivalent_to(alternative)) {
+            return make_node(AST_Binary, self, {
+                operator: "||",
+                left: make_node(AST_Binary, self, {
+                    operator: "&&",
+                    left: self.condition,
+                    right: consequent.left
+                }),
+                right: alternative
+            }).optimize(compressor);
+        }
         var in_bool = compressor.in_boolean_context();
         if (is_true(self.consequent)) {
             if (is_false(self.alternative)) {
diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js
index 7838fdb..e37c555 100644
--- a/test/compress/conditionals.js
+++ b/test/compress/conditionals.js
@@ -1224,3 +1224,46 @@ hoist_decl: {
         x() ? y() : z();
     }
 }
+
+to_and_or: {
+    options = {
+        conditionals: true,
+    }
+    input: {
+        var values = [
+            0,
+            null,
+            true,
+            "foo",
+            false,
+            -1 / 0,
+            void 0,
+        ];
+        values.forEach(function(x) {
+            values.forEach(function(y) {
+                values.forEach(function(z) {
+                    console.log(x ? y || z : z);
+                });
+            });
+        });
+    }
+    expect: {
+        var values = [
+            0,
+            null,
+            true,
+            "foo",
+            false,
+            -1 / 0,
+            void 0,
+        ];
+        values.forEach(function(x) {
+            values.forEach(function(y) {
+                values.forEach(function(z) {
+                    console.log(x && y || z);
+                });
+            });
+        });
+    }
+    expect_stdout: true
+}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/uglifyjs.git



More information about the Pkg-javascript-commits mailing list