Simplify iife `new` fix
authorkzc <zaxxon2011@gmail.com>
Sun, 15 May 2016 23:12:17 +0000 (19:12 -0400)
committerkzc <zaxxon2011@gmail.com>
Sun, 15 May 2016 23:12:17 +0000 (19:12 -0400)
as suggested by @rvanvelzen.

Added a test for IIFEs in nested contexts.

lib/compress.js
test/compress/negate-iife.js

index 1d6a943..6436796 100644 (file)
@@ -811,9 +811,7 @@ merge(Compressor.prototype, {
                 if (stat instanceof AST_SimpleStatement) {
                     stat.body = (function transform(thing) {
                         return thing.transform(new TreeTransformer(function(node){
-                            if (node instanceof AST_New
-                                && node.expression instanceof AST_Call
-                                && node.expression.expression instanceof AST_Function) {
+                            if (node instanceof AST_New) {
                                 return node;
                             }
                             if (node instanceof AST_Call && node.expression instanceof AST_Function) {
index 20b3f56..b73ff54 100644 (file)
@@ -75,6 +75,38 @@ negate_iife_4: {
     }
 }
 
+negate_iife_nested: {
+    options = {
+        negate_iife: true,
+        sequences: true,
+        conditionals: true,
+    };
+    input: {
+        function Foo(f) {
+            this.f = f;
+        }
+        new Foo(function() {
+            (function(x) {
+                (function(y) {
+                    console.log(y);
+                })(x);
+            })(7);
+        }).f();
+    }
+    expect: {
+        function Foo(f) {
+            this.f = f;
+        }
+        new Foo(function() {
+            !function(x) {
+                !function(y) {
+                    console.log(y);
+                }(x);
+            }(7);
+        }).f();
+    }
+}
+
 negate_iife_issue_1073: {
     options = {
         negate_iife: true,