[Pkg-javascript-commits] [uglifyjs] 136/491: fix variable accounting in `inline` (#2085)

Jonas Smedegaard dr at jones.dk
Wed Feb 14 19:51:29 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 2bdc8802ddd913a8b3b921426e898fc2f2257265
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date:   Tue Jun 13 01:40:14 2017 +0800

    fix variable accounting in `inline` (#2085)
    
    fixes #2084
---
 lib/compress.js            | 34 +++++++++++++++++++++-------------
 test/compress/functions.js | 39 +++++++++++++++++++++++++++++++++++++++
 test/compress/issue-281.js | 14 +++++++-------
 3 files changed, 67 insertions(+), 20 deletions(-)

diff --git a/lib/compress.js b/lib/compress.js
index 5f2ac2b..4d76878 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -3171,16 +3171,16 @@ merge(Compressor.prototype, {
                 && !exp.uses_arguments
                 && !exp.uses_eval
                 && !self.has_pure_annotation(compressor)) {
-                var body;
+                var value;
                 if (stat instanceof AST_Return) {
-                    body = stat.value.clone(true);
+                    value = stat.value.clone(true);
                 } else if (stat instanceof AST_SimpleStatement) {
-                    body = [];
-                    merge_sequence(body, stat.body.clone(true));
-                    merge_sequence(body, make_node(AST_Undefined, self));
-                    body = make_sequence(self, body);
+                    value = make_node(AST_UnaryPrefix, stat, {
+                        operator: "void",
+                        expression: stat.body.clone(true)
+                    });
                 }
-                if (body) {
+                if (value) {
                     var fn = exp.clone();
                     fn.argnames = [];
                     fn.body = [];
@@ -3200,17 +3200,25 @@ merge(Compressor.prototype, {
                         }));
                     }
                     fn.body.push(make_node(AST_Return, self, {
-                        value: body
+                        value: value
                     }));
-                    body = fn.transform(compressor).body;
+                    var body = fn.transform(compressor).body;
                     if (body.length == 0) return make_node(AST_Undefined, self);
                     if (body.length == 1 && body[0] instanceof AST_Return) {
-                        if (!body[0].value) return make_node(AST_Undefined, self);
-                        body = best_of(compressor, body[0].value, self);
+                        value = body[0].value;
+                        if (!value) return make_node(AST_Undefined, self);
+                        value.walk(new TreeWalker(function(node) {
+                            if (value === self) return true;
+                            if (node instanceof AST_SymbolRef && exp.variables.has(node.name)) {
+                                value = self;
+                                return true;
+                            }
+                        }));
+                        if (value !== self) value = best_of(compressor, value, self);
                     } else {
-                        body = self;
+                        value = self;
                     }
-                    if (body !== self) return body;
+                    if (value !== self) return value;
                 }
             }
             if (compressor.option("side_effects") && all(exp.body, is_empty)) {
diff --git a/test/compress/functions.js b/test/compress/functions.js
index 180bb11..1359670 100644
--- a/test/compress/functions.js
+++ b/test/compress/functions.js
@@ -297,3 +297,42 @@ webkit: {
     expect_exact: "console.log((function(){1+1}).a=1);"
     expect_stdout: "1"
 }
+
+issue_2084: {
+    options = {
+        collapse_vars: true,
+        conditionals: true,
+        evaluate: true,
+        inline: true,
+        passes: 2,
+        reduce_vars: true,
+        sequences: true,
+        side_effects: true,
+        unused: true,
+    }
+    input: {
+        var c = 0;
+        !function() {
+            !function(c) {
+                c = 1 + c;
+                var c = 0;
+                function f14(a_1) {
+                    if (c = 1 + c, 0 !== 23..toString())
+                        c = 1 + c, a_1 && (a_1[0] = 0);
+                }
+                f14();
+            }(-1);
+        }();
+        console.log(c);
+    }
+    expect: {
+        var c = 0;
+        !function(c) {
+            c = 1 + c,
+            c = 1 + (c = 0),
+            0 !== 23..toString() && (c = 1 + c);
+        }(-1),
+        console.log(c);
+    }
+    expect_stdout: "0"
+}
diff --git a/test/compress/issue-281.js b/test/compress/issue-281.js
index 7a6c03b..9b8c8bf 100644
--- a/test/compress/issue-281.js
+++ b/test/compress/issue-281.js
@@ -151,7 +151,7 @@ negate_iife_4: {
         })();
     }
     expect: {
-        t ? console.log(true) : console.log(false), console.log("something"), void 0;
+        t ? console.log(true) : console.log(false), void console.log("something");
     }
 }
 
@@ -174,7 +174,7 @@ negate_iife_5: {
         })();
     }
     expect: {
-        t ? foo(true) : bar(false), console.log("something"), void 0;
+        t ? foo(true) : bar(false), void console.log("something");
     }
 }
 
@@ -197,7 +197,7 @@ negate_iife_5_off: {
         })();
     }
     expect: {
-        t ? foo(true) : bar(false), console.log("something"), void 0;
+        t ? foo(true) : bar(false), void console.log("something");
     }
 }
 
@@ -214,7 +214,7 @@ issue_1254_negate_iife_true: {
             };
         })()();
     }
-    expect_exact: 'console.log("test"),void 0;'
+    expect_exact: 'void console.log("test");'
     expect_stdout: true
 }
 
@@ -231,7 +231,7 @@ issue_1254_negate_iife_nested: {
             };
         })()()()()();
     }
-    expect_exact: '(console.log("test"),void 0)()()();'
+    expect_exact: '(void console.log("test"))()()();'
 }
 
 negate_iife_issue_1073: {
@@ -382,7 +382,7 @@ wrap_iife: {
             };
         })()();
     }
-    expect_exact: 'console.log("test"),void 0;'
+    expect_exact: 'void console.log("test");'
 }
 
 wrap_iife_in_expression: {
@@ -416,7 +416,7 @@ wrap_iife_in_return_call: {
             })();
         })()();
     }
-    expect_exact: '(console.log("test"),void 0)();'
+    expect_exact: '(void console.log("test"))();'
 }
 
 pure_annotation: {

-- 
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