From a82c57c4b936c64bd8377e2f5d50fa49b78e3830 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Sun, 8 Feb 2015 16:40:04 -0800 Subject: [PATCH] Make sure positions of child elements are consistent. --- src/compiler/parser.ts | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index 88fff6de959..adf123e6be0 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -393,6 +393,7 @@ module ts { } forEachChild(node, visitNode, visitArray); + checkNodePositions(node, aggressiveChecks); } function visitArray(array: IncrementalNodeArray) { @@ -479,8 +480,19 @@ module ts { } } + function checkNodePositions(node: Node, aggressiveChecks: boolean) { + if (aggressiveChecks) { + var pos = node.pos; + forEachChild(node, child => { + Debug.assert(child.pos >= pos); + pos = child.end; + }); + Debug.assert(pos <= node.end); + } + } + function updateTokenPositionsAndMarkElements( - node: IncrementalNode, + sourceFile: IncrementalNode, changeStart: number, changeRangeOldEnd: number, changeRangeNewEnd: number, @@ -489,7 +501,7 @@ module ts { newText: string, aggressiveChecks: boolean): void { - visitNode(node); + visitNode(sourceFile); return; function visitNode(child: IncrementalNode) { @@ -510,6 +522,8 @@ module ts { // Adjust the pos or end (or both) of the intersecting element accordingly. adjustIntersectingElement(child, changeStart, changeRangeOldEnd, changeRangeNewEnd, delta); forEachChild(child, visitNode, visitArray); + + checkNodePositions(child, aggressiveChecks); return; }