Skip to content

Commit a9a2fe5

Browse files
Specialize computeData for arrays.
1 parent 4cefe35 commit a9a2fe5

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

src/services/syntax/syntaxElement.ts

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -334,27 +334,52 @@ module TypeScript {
334334
return info;
335335
}
336336

337+
function combineData(fullWidth: number, isIncrementallyUnusable: boolean) {
338+
return (fullWidth << SyntaxConstants.NodeFullWidthShift)
339+
| (isIncrementallyUnusable ? SyntaxConstants.NodeIncrementallyUnusableMask : 0)
340+
| SyntaxConstants.NodeDataComputed;
341+
}
342+
343+
function listComputeData(list: ISyntaxNodeOrToken[]): number {
344+
var fullWidth = 0;
345+
var isIncrementallyUnusable = false;
346+
347+
for (var i = 0, n = list.length; i < n; i++) {
348+
var child: ISyntaxElement = list[i];
349+
350+
fullWidth += TypeScript.fullWidth(child);
351+
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
352+
}
353+
354+
return combineData(fullWidth, isIncrementallyUnusable);
355+
}
356+
337357
function computeData(element: ISyntaxElement): number {
338-
var slotCount = childCount(element);
358+
if (isList(element)) {
359+
return listComputeData(<ISyntaxNodeOrToken[]>element);
360+
}
361+
else {
362+
return nodeOrTokenComputeData(<ISyntaxNodeOrToken>element);
363+
}
364+
}
339365

366+
function nodeOrTokenComputeData(nodeOrToken: ISyntaxNodeOrToken) {
340367
var fullWidth = 0;
368+
var slotCount = nodeOrToken.childCount;
341369

342370
// If we have no children (like an OmmittedExpressionSyntax), we're automatically not reusable.
343-
var isIncrementallyUnusable = slotCount === 0 && !isList(element);
371+
var isIncrementallyUnusable = slotCount === 0;
344372

345373
for (var i = 0, n = slotCount; i < n; i++) {
346-
var child = childAt(element, i);
374+
var child = nodeOrToken.childAt(i);
347375

348376
if (child) {
349377
fullWidth += TypeScript.fullWidth(child);
350-
351378
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
352379
}
353380
}
354381

355-
return (fullWidth << SyntaxConstants.NodeFullWidthShift)
356-
| (isIncrementallyUnusable ? SyntaxConstants.NodeIncrementallyUnusableMask : 0)
357-
| SyntaxConstants.NodeDataComputed;
382+
return combineData(fullWidth, isIncrementallyUnusable);
358383
}
359384

360385
export function start(element: ISyntaxElement, text?: ISimpleText): number {

0 commit comments

Comments
 (0)