[Pkg-javascript-commits] [uglifyjs] 135/228: fix assignment extraction from conditional (#1651)

Jonas Smedegaard dr at jones.dk
Sat Apr 15 14:25:24 UTC 2017


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

js pushed a commit to branch master
in repository uglifyjs.

commit 0432a7abb98f3aec871daa88331aa9223979dde3
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date:   Fri Mar 24 18:52:48 2017 +0800

    fix assignment extraction from conditional (#1651)
    
    fixes #1645
    fixes #1646
---
 lib/compress.js               | 16 +++++++---------
 test/compress/conditionals.js | 40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/lib/compress.js b/lib/compress.js
index b3edb84..cbcb7b8 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -3550,19 +3550,17 @@ merge(Compressor.prototype, {
         }
         var consequent = self.consequent;
         var alternative = self.alternative;
+        // if (foo) exp = something; else exp = something_else;
+        //                   |
+        //                   v
+        // exp = foo ? something : something_else;
         if (consequent instanceof AST_Assign
             && alternative instanceof AST_Assign
             && consequent.operator == alternative.operator
             && consequent.left.equivalent_to(alternative.left)
-            && (!consequent.left.has_side_effects(compressor)
-                || !self.condition.has_side_effects(compressor))
-           ) {
-            /*
-             * Stuff like this:
-             * if (foo) exp = something; else exp = something_else;
-             * ==>
-             * exp = foo ? something : something_else;
-             */
+            && (!self.condition.has_side_effects(compressor)
+                || consequent.operator == "="
+                    && !consequent.left.has_side_effects(compressor))) {
             return make_node(AST_Assign, self, {
                 operator: consequent.operator,
                 left: consequent.left,
diff --git a/test/compress/conditionals.js b/test/compress/conditionals.js
index 7c81cc8..c563983 100644
--- a/test/compress/conditionals.js
+++ b/test/compress/conditionals.js
@@ -893,3 +893,43 @@ equality_conditionals_true: {
     }
     expect_stdout: true
 }
+
+issue_1645_1: {
+    options = {
+        conditionals: true,
+    }
+    input: {
+        var a = 100, b = 10;
+        (b = a) ? a++ + (b += a) ? b += a : b += a : b ^= a;
+        console.log(a, b);
+    }
+    expect: {
+        var a = 100, b = 10;
+        (b = a) ? (a++ + (b += a), b += a) : b ^= a;
+        console.log(a,b);
+    }
+    expect_stdout: true
+}
+
+issue_1645_2: {
+    options = {
+        conditionals: true,
+    }
+    input: {
+        var a = 0;
+        function f() {
+            return a++;
+        }
+        f() ? a += 2 : a += 4;
+        console.log(a);
+    }
+    expect: {
+        var a = 0;
+        function f(){
+            return a++;
+        }
+        f() ? a += 2 : a += 4;
+        console.log(a);
+    }
+    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