diff --git a/lib/6to5/types.js b/lib/6to5/types.js index c3ccde6d95..b1249068c3 100644 --- a/lib/6to5/types.js +++ b/lib/6to5/types.js @@ -48,7 +48,7 @@ exports.isReferenced = function (node, parent) { }; exports.ensureBlock = function (node) { - node[key] = exports.toBlock(node.body, node); + node.body = exports.toBlock(node.body, node); }; exports.toBlock = function (node, parent) { @@ -84,6 +84,8 @@ exports.ensureExpressionType = function (node) { }; exports.needsParans = function (node, parent) { + if (!parent) return false; + // if (exports.isUnaryLike(node)) { return parent.type === "MemberExpression" && parent.object === node; @@ -151,9 +153,18 @@ exports.needsParans = function (node, parent) { || parent.type === "YieldExpression"; } - //if (parent.type === "NewExpression" && parent.callee === node) { - // return containsCallExpression(node); - //} + if (parent.type === "NewExpression") { + if (node.type !== "Identifier" && node.callee === node) { + return true; + } + } + + if (node.type === "NewExpression") { + // (new Foo).bar(); + if (parent.type === "MemberExpression" && parent.object === node) { + return true; + } + } // (1).valueOf() if (node.type === "Literal" && _.isNumber(node.value) && parent.type === "MemberExpression" && parent.object === node) {