[Pkg-javascript-commits] [uglifyjs] 271/491: fix object literal tracing in `reduce_vars` (#2461)

Jonas Smedegaard dr at jones.dk
Wed Feb 14 19:51:43 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 94525d859f5db559366f96b646aca84438b0f982
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date:   Fri Nov 10 05:47:10 2017 +0800

    fix object literal tracing in `reduce_vars` (#2461)
---
 lib/compress.js              | 10 ++++++++--
 test/compress/reduce_vars.js | 38 +++++++++++++++++++++++++++++++++++++-
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/lib/compress.js b/lib/compress.js
index d915e23..24c5be2 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -609,8 +609,11 @@ merge(Compressor.prototype, {
                     && parent.expression === node
                     && (!(value instanceof AST_Function) || value.contains_this(parent))) {
                 return true;
-            } else if (parent instanceof AST_Array || parent instanceof AST_Object) {
+            } else if (parent instanceof AST_Array) {
                 return is_modified(parent, parent, level + 1);
+            } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
+                var obj = tw.parent(level + 1);
+                return is_modified(obj, obj, level + 2);
             } else if (parent instanceof AST_PropAccess && parent.expression === node) {
                 return !immutable && is_modified(parent, read_property(value, parent.property), level + 1);
             }
@@ -626,8 +629,11 @@ merge(Compressor.prototype, {
                 || parent instanceof AST_VarDef && node === parent.value) {
                 d.escaped = true;
                 return;
-            } else if (parent instanceof AST_Array || parent instanceof AST_Object) {
+            } else if (parent instanceof AST_Array) {
                 mark_escaped(d, parent, parent, level + 1);
+            } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
+                var obj = tw.parent(level + 1);
+                mark_escaped(d, obj, obj, level + 2);
             } else if (parent instanceof AST_PropAccess && node === parent.expression) {
                 value = read_property(value, parent.property);
                 mark_escaped(d, parent, value, level + 1);
diff --git a/test/compress/reduce_vars.js b/test/compress/reduce_vars.js
index d7c5601..e84ac6c 100644
--- a/test/compress/reduce_vars.js
+++ b/test/compress/reduce_vars.js
@@ -286,6 +286,7 @@ unsafe_evaluate_modified: {
         function inc() { this.p++; }
         console.log(function(){ var o={p:6}; inc.call(o); console.log(o.p); return o.p; }());
         console.log(function(){ var o={p:7}; console.log([o][0].p++); return o.p; }());
+        console.log(function(){ var o={p:8}; console.log({q:o}.q.p++); return o.p; }());
     }
     expect: {
         console.log(function(){ var o={p:1}; o.p++; console.log(o.p); return o.p; }());
@@ -296,6 +297,7 @@ unsafe_evaluate_modified: {
         function inc() { this.p++; }
         console.log(function(){ var o={p:6}; inc.call(o); console.log(o.p); return o.p; }());
         console.log(function(){ var o={p:7}; console.log([o][0].p++); return o.p; }());
+        console.log(function(){ var o={p:8}; console.log({q:o}.q.p++); return o.p; }());
     }
     expect_stdout: true
 }
@@ -3269,7 +3271,7 @@ const_expr_2: {
     expect_stdout: "2 2"
 }
 
-escaped_prop: {
+escaped_prop_1: {
     options = {
         collapse_vars: true,
         evaluate: true,
@@ -3298,6 +3300,40 @@ escaped_prop: {
     expect_stdout: "2"
 }
 
+escaped_prop_2: {
+    options = {
+        reduce_vars: true,
+        toplevel: true,
+        unused: true,
+    }
+    input: {
+        var a;
+        function f(b) {
+            if (a) console.log(a === b.c);
+            a = b.c;
+        }
+        function g() {}
+        function h() {
+            f({ c: g });
+        }
+        h();
+        h();
+    }
+    expect: {
+        var a;
+        function g() {}
+        function h() {
+            (function(b) {
+                if (a) console.log(a === b.c);
+                a = b.c;
+            })({ c: g });
+        }
+        h();
+        h();
+    }
+    expect_stdout: "true"
+}
+
 issue_2420_1: {
     options = {
         reduce_vars: 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