[Pkg-javascript-commits] [uglifyjs] 18/49: Fix --mangle-props and --mangle-props=unquoted

Jonas Smedegaard dr at jones.dk
Fri Dec 9 11:43:26 UTC 2016


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

js pushed a commit to branch master
in repository uglifyjs.

commit de619ae5a62472a76b0bfaa23d8e0b3068472196
Author: kzc <zaxxon2011 at gmail.com>
Date:   Sun Jul 31 02:35:14 2016 -0400

    Fix --mangle-props and --mangle-props=unquoted
    
    Fixes: #1247
    
    Fix --mangle-props and --name-cache inconsistency.
    AST_Dot and AST_Sub properties are now mangled by --mangle-props
    without regard to being used in an assignment statement.
    
    Note: if --mangle-props is used then *all* javascript files used must
    be uglified with the same mangle options.
    
    Fix the ignore_quoted=true mangle option, also known as
    `--mangle-props=unquoted`.  If a given property is quoted anywhere
    it will not be mangled in any quoted or non-quoted context.
---
 lib/propmangle.js           | 25 +++++++++++++------------
 test/compress/properties.js | 29 +++++++++++++++++++++++------
 2 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/lib/propmangle.js b/lib/propmangle.js
index 08043d7..3923baa 100644
--- a/lib/propmangle.js
+++ b/lib/propmangle.js
@@ -86,27 +86,22 @@ function mangle_properties(ast, options) {
 
     var names_to_mangle = [];
     var unmangleable = [];
+    var ignored = {};
 
     // step 1: find candidates to mangle
     ast.walk(new TreeWalker(function(node){
         if (node instanceof AST_ObjectKeyVal) {
-            if (!(ignore_quoted && node.quote))
-                add(node.key);
+            add(node.key, ignore_quoted && node.quote);
         }
         else if (node instanceof AST_ObjectProperty) {
             // setter or getter, since KeyVal is handled above
             add(node.key.name);
         }
         else if (node instanceof AST_Dot) {
-            if (this.parent() instanceof AST_Assign) {
-                add(node.property);
-            }
+            add(node.property);
         }
         else if (node instanceof AST_Sub) {
-            if (this.parent() instanceof AST_Assign) {
-                if (!ignore_quoted)
-                    addStrings(node.property);
-            }
+            addStrings(node.property, ignore_quoted);
         }
     }));
 
@@ -154,13 +149,19 @@ function mangle_properties(ast, options) {
     }
 
     function should_mangle(name) {
+        if (ignore_quoted && name in ignored) return false;
         if (regex && !regex.test(name)) return false;
         if (reserved.indexOf(name) >= 0) return false;
         return cache.props.has(name)
             || names_to_mangle.indexOf(name) >= 0;
     }
 
-    function add(name) {
+    function add(name, ignore) {
+        if (ignore) {
+            ignored[name] = true;
+            return;
+        }
+
         if (can_mangle(name))
             push_uniq(names_to_mangle, name);
 
@@ -184,7 +185,7 @@ function mangle_properties(ast, options) {
         return mangled;
     }
 
-    function addStrings(node) {
+    function addStrings(node, ignore) {
         var out = {};
         try {
             (function walk(node){
@@ -194,7 +195,7 @@ function mangle_properties(ast, options) {
                         return true;
                     }
                     if (node instanceof AST_String) {
-                        add(node.value);
+                        add(node.value, ignore);
                         return true;
                     }
                     if (node instanceof AST_Conditional) {
diff --git a/test/compress/properties.js b/test/compress/properties.js
index 4aaa92c..f168080 100644
--- a/test/compress/properties.js
+++ b/test/compress/properties.js
@@ -82,15 +82,22 @@ mangle_properties: {
         a["foo"] = "bar";
         a.color = "red";
         x = {"bar": 10};
+        a.run(x.bar, a.foo);
+        a['run']({color: "blue", foo: "baz"});
     }
     expect: {
         a["a"] = "bar";
         a.b = "red";
         x = {c: 10};
+        a.d(x.c, a.a);
+        a['d']({b: "blue", a: "baz"});
     }
 }
 
 mangle_unquoted_properties: {
+    options = {
+        properties: false
+    }
     mangle_props = {
         ignore_quoted: true
     }
@@ -100,27 +107,37 @@ mangle_unquoted_properties: {
         keep_quoted_props: true,
     }
     input: {
+        a.top = 1;
         function f1() {
             a["foo"] = "bar";
             a.color = "red";
-            x = {"bar": 10};
+            a.stuff = 2;
+            x = {"bar": 10, size: 7};
+            a.size = 9;
         }
         function f2() {
             a.foo = "bar";
             a['color'] = "red";
-            x = {bar: 10};
+            x = {bar: 10, size: 7};
+            a.size = 9;
+            a.stuff = 3;
         }
     }
     expect: {
+        a.a = 1;
         function f1() {
             a["foo"] = "bar";
-            a.a = "red";
-            x = {"bar": 10};
+            a.color = "red";
+            a.b = 2;
+            x = {"bar": 10, c: 7};
+            a.c = 9;
         }
         function f2() {
-            a.b = "bar";
+            a.foo = "bar";
             a['color'] = "red";
-            x = {c: 10};
+            x = {bar: 10, c: 7};
+            a.c = 9;
+            a.b = 3;
         }
     }
 }

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