diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 3fd2bbf4676..b70c4a7a1d5 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -13,11 +13,15 @@ module ts { } function visitNode(cbNode: (node: Node) => T, node: Node): T { - return node ? cbNode(node) : void 0; + if (node) { + return cbNode(node); + } } function visitNodeArray(cbNodes: (nodes: Node[]) => T, nodes: Node[]) { - return nodes ? cbNodes(nodes) : void 0; + if (nodes) { + return cbNodes(nodes); + } } function visitEachNode(cbNode: (node: Node) => T, nodes: Node[]) { @@ -39,6 +43,9 @@ module ts { if (!node) { return; } + // The visitXXX functions could be written as local functions that close over the cbNode and cbNodeArray + // callback parameters, but that causes a closure allocation for each invocation with noticeable effects + // on performance. var visitNodes: (cb: (node: Node | Node[]) => T, nodes: Node[]) => T = cbNodeArray ? visitNodeArray : visitEachNode; var cbNodes = cbNodeArray || cbNode; switch (node.kind) {