diff --git a/lib/output.js b/lib/output.js index d0238da8..81712d21 100644 --- a/lib/output.js +++ b/lib/output.js @@ -597,6 +597,7 @@ function OutputStream(options) { || p instanceof AST_ObjectProperty // { foo: (1, 2) }.foo ==> 2 || p instanceof AST_Conditional /* (false, true) ? (a = 10, b = 20) : (c = 30) * ==> 20 (side effect, set a := 10 and b := 20) */ + || p instanceof AST_Arrow // x => (x, x) ; }); @@ -944,7 +945,7 @@ function OutputStream(options) { var parent = output.parent(); var needs_parens = parent instanceof AST_Binary || parent instanceof AST_Unary || - parent instanceof AST_Call; + (parent instanceof AST_Call && self === parent.expression); if (needs_parens) { output.print("(") } if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol && !self.argnames[0].default) { self.argnames[0].print(output); diff --git a/test/compress/harmony.js b/test/compress/harmony.js index 122069dd..e13b27e0 100644 --- a/test/compress/harmony.js +++ b/test/compress/harmony.js @@ -390,4 +390,15 @@ regression_cannot_use_of: { x.of; foo(); /* Label statement missing? No prob. */ } -} \ No newline at end of file +} + +fat_arrow_as_param: { + input: { + foo(x => x); + foo(x => x, y => y); + + foo(x => (x, x)); + foo(x => (x, x), y => (y, y)); + } + expect_exact: "foo(x=>x);foo(x=>x,y=>y);foo(x=>(x,x));foo(x=>(x,x),y=>(y,y));" +}