[Pkg-javascript-commits] [uglifyjs] 432/491: general improvements around `AST_ForIn` (#2796)

Jonas Smedegaard dr at jones.dk
Wed Feb 14 19:52:01 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 b4aef753e7f65c0919c6c40b2b28d9f149bc81ed
Author: Alex Lam S.L <alexlamsl at gmail.com>
Date:   Tue Jan 16 17:03:12 2018 +0800

    general improvements around `AST_ForIn` (#2796)
    
    - compress using `collapse_vars`
    - remove unused `name`
    - simplify `loop_body`
---
 lib/ast.js                     |  3 +--
 lib/compress.js                | 10 +++++++---
 lib/parse.js                   |  2 --
 test/compress/collapse_vars.js | 27 +++++++++++++++++++++++++++
 4 files changed, 35 insertions(+), 7 deletions(-)

diff --git a/lib/ast.js b/lib/ast.js
index 6591867..4e41659 100644
--- a/lib/ast.js
+++ b/lib/ast.js
@@ -267,11 +267,10 @@ var AST_For = DEFNODE("For", "init condition step", {
     }
 }, AST_IterationStatement);
 
-var AST_ForIn = DEFNODE("ForIn", "init name object", {
+var AST_ForIn = DEFNODE("ForIn", "init object", {
     $documentation: "A `for ... in` statement",
     $propdoc: {
         init: "[AST_Node] the `for/in` initialization code",
-        name: "[AST_SymbolRef?] the loop variable, only if `init` is AST_Var",
         object: "[AST_Node] the object that we're looping through"
     },
     _walk: function(visitor) {
diff --git a/lib/compress.js b/lib/compress.js
index fb1c2fd..cd5651a 100644
--- a/lib/compress.js
+++ b/lib/compress.js
@@ -847,9 +847,8 @@ merge(Compressor.prototype, {
     };
 
     function loop_body(x) {
-        if (x instanceof AST_Switch) return x;
-        if (x instanceof AST_For || x instanceof AST_ForIn || x instanceof AST_DWLoop) {
-            return (x.body instanceof AST_BlockStatement ? x.body : x);
+        if (x instanceof AST_IterationStatement) {
+            return x.body instanceof AST_BlockStatement ? x.body : x;
         }
         return x;
     };
@@ -1193,6 +1192,11 @@ merge(Compressor.prototype, {
                     if (!(expr.body instanceof AST_Block)) {
                         extract_candidates(expr.body);
                     }
+                } else if (expr instanceof AST_ForIn) {
+                    extract_candidates(expr.object);
+                    if (!(expr.body instanceof AST_Block)) {
+                        extract_candidates(expr.body);
+                    }
                 } else if (expr instanceof AST_If) {
                     extract_candidates(expr.condition);
                     if (!(expr.body instanceof AST_Block)) {
diff --git a/lib/parse.js b/lib/parse.js
index 001587b..eba833d 100644
--- a/lib/parse.js
+++ b/lib/parse.js
@@ -1054,12 +1054,10 @@ function parse($TEXT, options) {
     };
 
     function for_in(init) {
-        var lhs = init instanceof AST_Var ? init.definitions[0].name : null;
         var obj = expression(true);
         expect(")");
         return new AST_ForIn({
             init   : init,
-            name   : lhs,
             object : obj,
             body   : in_loop(statement)
         });
diff --git a/test/compress/collapse_vars.js b/test/compress/collapse_vars.js
index f252a7f..9597b67 100644
--- a/test/compress/collapse_vars.js
+++ b/test/compress/collapse_vars.js
@@ -4062,3 +4062,30 @@ cascade_statement: {
         }
     }
 }
+
+cascade_forin: {
+    options = {
+        collapse_vars: true,
+    }
+    input: {
+        var a;
+        function f(b) {
+            return [ b, b, b ];
+        }
+        for (var c in a = console, f(a))
+            console.log(c);
+    }
+    expect: {
+        var a;
+        function f(b) {
+            return [ b, b, b ];
+        }
+        for (var c in f(a = console))
+            console.log(c);
+    }
+    expect_stdout: [
+        "0",
+        "1",
+        "2",
+    ]
+}

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