From 402bbda1d17eef06907bbe270675d1a01d29f021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?F=C3=A1bio=20Santos?= Date: Wed, 7 Mar 2018 20:50:01 +0000 Subject: [PATCH] parenthesise exported iifes correctly --- lib/output.js | 14 ++++++++++++++ test/compress/export.js | 2 +- test/compress/issue-2977.js | 7 +++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 test/compress/issue-2977.js diff --git a/lib/output.js b/lib/output.js index e4987179..c6d6355b 100644 --- a/lib/output.js +++ b/lib/output.js @@ -1106,6 +1106,20 @@ function OutputStream(options) { self._do_print(output); }); + DEFPRINT(AST_Function, function(self, output) { + var parent = output.parent(); + var grandparent = output.parent(1); + var is_exported_iife = parent instanceof AST_Call && parent.expression == self && + grandparent instanceof AST_Export && grandparent.is_default; + if (is_exported_iife) { + output.with_parens(function() { + self._do_print(output); + }); + } else { + self._do_print(output); + } + }); + DEFPRINT(AST_PrefixedTemplateString, function(self, output) { self.prefix.print(output); self.template_string.print(output); diff --git a/test/compress/export.js b/test/compress/export.js index 783fa80a..34cf2606 100644 --- a/test/compress/export.js +++ b/test/compress/export.js @@ -410,7 +410,7 @@ export_default_anonymous_function_not_call: { export default function(){}(foo); } // FIXME: should be `export default function(){};foo;` - expect_exact: "export default function(){}(foo);" + expect_exact: "export default(function(){})(foo);" } export_default_anonymous_generator_not_call: { diff --git a/test/compress/issue-2977.js b/test/compress/issue-2977.js new file mode 100644 index 00000000..853e0a43 --- /dev/null +++ b/test/compress/issue-2977.js @@ -0,0 +1,7 @@ + +issue_2977: { + input: { + export default (function () {})(); + } + expect_exact: "export default(function(){})();" +}