diff options
Diffstat (limited to 'lib/output.js')
-rw-r--r-- | lib/output.js | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/lib/output.js b/lib/output.js index ad4690d5..7309737f 100644 --- a/lib/output.js +++ b/lib/output.js @@ -470,7 +470,22 @@ function OutputStream(options) { PARENS(AST_PropAccess, function(output){ var p = output.parent(); - return p instanceof AST_New && p.expression === this; + if (p instanceof AST_New && p.expression === this) { + // i.e. new (foo.bar().baz) + // + // if there's one call into this subtree, then we need + // parens around it too, otherwise the call will be + // interpreted as passing the arguments to the upper New + // expression. + try { + this.walk(new TreeWalker(function(node){ + if (node instanceof AST_Call) throw p; + })); + } catch(ex) { + if (ex !== p) throw ex; + return true; + } + } }); PARENS(AST_Call, function(output){ |