diff --git a/lib/6to5/generation/node/index.js b/lib/6to5/generation/node/index.js index bedd7ba60a..179b3015d7 100644 --- a/lib/6to5/generation/node/index.js +++ b/lib/6to5/generation/node/index.js @@ -28,13 +28,11 @@ function Node(node, parent) { this.node = node; } -Node.prototype.isUserWhitespacable = function () { - return t.isUserWhitespacable(this.node); +Node.isUserWhitespacable = function (node) { + return t.isUserWhitespacable(node); }; -Node.prototype.needsWhitespace = function (type) { - var parent = this.parent; - var node = this.node; +Node.needsWhitespace = function (node, parent, type) { if (!node) return 0; if (t.isExpressionStatement(node)) { @@ -51,18 +49,15 @@ Node.prototype.needsWhitespace = function (type) { return lines || 0; }; -Node.prototype.needsWhitespaceBefore = function () { - return this.needsWhitespace("before"); +Node.needsWhitespaceBefore = function (node, parent) { + return Node.needsWhitespace(node, parent, "before"); }; -Node.prototype.needsWhitespaceAfter = function () { - return this.needsWhitespace("after"); +Node.needsWhitespaceAfter = function (node, parent) { + return Node.needsWhitespace(node, parent, "after"); }; -Node.prototype.needsParens = function () { - var parent = this.parent; - var node = this.node; - +Node.needsParens = function (node, parent) { if (!parent) return false; if (t.isNewExpression(parent) && parent.callee === node) { @@ -77,10 +72,7 @@ Node.prototype.needsParens = function () { return find(parens, node, parent); }; -Node.prototype.needsParensNoLineTerminator = function () { - var parent = this.parent; - var node = this.node; - +Node.needsParensNoLineTerminator = function (node, parent) { if (!parent) return false; // no comments @@ -100,17 +92,18 @@ Node.prototype.needsParensNoLineTerminator = function () { return false; }; -_.each(Node.prototype, function (fn, key) { - Node[key] = function (node, parent) { - var n = new Node(node, parent); - +_.each(Node, function (fn, key) { + Node.prototype[key] = function () { // Avoid leaking arguments to prevent deoptimization - var skipCount = 2; - var args = new Array(arguments.length - skipCount); + var args = new Array(arguments.length + 2); + + args[0] = this.node; + args[1] = this.parent; + for (var i = 0; i < args.length; i++) { - args[i] = arguments[i + 2]; + args[i + 2] = arguments[i]; } - return n[key].apply(n, args); + return Node[key].apply(null, args); }; });