Skip to content

Commit 944315e

Browse files
committed
Ensure that we copy empty NodeArrays during transform
1 parent d273704 commit 944315e

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

src/compiler/checker.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5239,7 +5239,18 @@ namespace ts {
52395239
if (!nodeIsSynthesized(node) && getParseTreeNode(node) === node) {
52405240
return node;
52415241
}
5242-
return setTextRange(factory.cloneNode(visitEachChild(node, deepCloneOrReuseNode, nullTransformationContext)), node);
5242+
return setTextRange(factory.cloneNode(visitEachChild(node, deepCloneOrReuseNode, nullTransformationContext, deepCloneOrReuseNodes)), node);
5243+
}
5244+
5245+
function deepCloneOrReuseNodes<T extends Node>(nodes: NodeArray<T>, visitor: Visitor | undefined, test?: (node: Node) => boolean, start?: number, count?: number): NodeArray<T>;
5246+
function deepCloneOrReuseNodes<T extends Node>(nodes: NodeArray<T> | undefined, visitor: Visitor | undefined, test?: (node: Node) => boolean, start?: number, count?: number): NodeArray<T> | undefined;
5247+
function deepCloneOrReuseNodes<T extends Node>(nodes: NodeArray<T> | undefined, visitor: Visitor | undefined, test?: (node: Node) => boolean, start?: number, count?: number): NodeArray<T> | undefined {
5248+
if (nodes && nodes.length === 0) {
5249+
// Ensure we explicitly make a copy of an empty array; visitNodes will not do this unless the array has elements,
5250+
// which can lead to us reusing the same empty NodeArray more than once within the same AST during type noding.
5251+
return setTextRange(factory.createNodeArray<T>(/*nodes*/ undefined, nodes.hasTrailingComma), nodes);
5252+
}
5253+
return visitNodes(nodes, visitor, test, start, count);
52435254
}
52445255
}
52455256

0 commit comments

Comments
 (0)