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(){})();" +}