From: kzc Date: Mon, 9 May 2016 07:19:28 +0000 (-0400) Subject: Do not apply negate_iife optimization to `new` expression X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=bcc1318d4b7275feee02f782700d6b6e4a68b54f;p=UglifyJS.git Do not apply negate_iife optimization to `new` expression --- diff --git a/lib/compress.js b/lib/compress.js index 2bcfcf30..1d6a943b 100644 --- a/lib/compress.js +++ b/lib/compress.js @@ -811,6 +811,11 @@ 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) { + return node; + } if (node instanceof AST_Call && node.expression instanceof AST_Function) { return make_node(AST_UnaryPrefix, node, { operator: "!", diff --git a/test/compress/negate-iife.js b/test/compress/negate-iife.js index 89c3f064..20b3f56e 100644 --- a/test/compress/negate-iife.js +++ b/test/compress/negate-iife.js @@ -74,3 +74,27 @@ negate_iife_4: { }(); } } + +negate_iife_issue_1073: { + options = { + negate_iife: true, + sequences: true, + conditionals: true, + }; + input: { + new (function(a) { + return function Foo() { + this.x = a; + console.log(this); + }; + }(7))(); + } + expect: { + new (function(a) { + return function Foo() { + this.x = a, + console.log(this); + }; + }(7))(); + } +}