aboutsummaryrefslogtreecommitdiff
path: root/lib/output.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/output.js')
-rw-r--r--lib/output.js17
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){