mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-05-27 22:39:59 -05:00
Specialize computeData for arrays.
This commit is contained in:
@@ -334,27 +334,52 @@ module TypeScript {
|
||||
return info;
|
||||
}
|
||||
|
||||
function computeData(element: ISyntaxElement): number {
|
||||
var slotCount = childCount(element);
|
||||
function combineData(fullWidth: number, isIncrementallyUnusable: boolean) {
|
||||
return (fullWidth << SyntaxConstants.NodeFullWidthShift)
|
||||
| (isIncrementallyUnusable ? SyntaxConstants.NodeIncrementallyUnusableMask : 0)
|
||||
| SyntaxConstants.NodeDataComputed;
|
||||
}
|
||||
|
||||
function listComputeData(list: ISyntaxNodeOrToken[]): number {
|
||||
var fullWidth = 0;
|
||||
var isIncrementallyUnusable = false;
|
||||
|
||||
for (var i = 0, n = list.length; i < n; i++) {
|
||||
var child: ISyntaxElement = list[i];
|
||||
|
||||
fullWidth += TypeScript.fullWidth(child);
|
||||
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
|
||||
}
|
||||
|
||||
return combineData(fullWidth, isIncrementallyUnusable);
|
||||
}
|
||||
|
||||
function computeData(element: ISyntaxElement): number {
|
||||
if (isList(element)) {
|
||||
return listComputeData(<ISyntaxNodeOrToken[]>element);
|
||||
}
|
||||
else {
|
||||
return nodeOrTokenComputeData(<ISyntaxNodeOrToken>element);
|
||||
}
|
||||
}
|
||||
|
||||
function nodeOrTokenComputeData(nodeOrToken: ISyntaxNodeOrToken) {
|
||||
var fullWidth = 0;
|
||||
var slotCount = nodeOrToken.childCount;
|
||||
|
||||
// If we have no children (like an OmmittedExpressionSyntax), we're automatically not reusable.
|
||||
var isIncrementallyUnusable = slotCount === 0 && !isList(element);
|
||||
var isIncrementallyUnusable = slotCount === 0;
|
||||
|
||||
for (var i = 0, n = slotCount; i < n; i++) {
|
||||
var child = childAt(element, i);
|
||||
var child = nodeOrToken.childAt(i);
|
||||
|
||||
if (child) {
|
||||
fullWidth += TypeScript.fullWidth(child);
|
||||
|
||||
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
|
||||
}
|
||||
}
|
||||
|
||||
return (fullWidth << SyntaxConstants.NodeFullWidthShift)
|
||||
| (isIncrementallyUnusable ? SyntaxConstants.NodeIncrementallyUnusableMask : 0)
|
||||
| SyntaxConstants.NodeDataComputed;
|
||||
return combineData(fullWidth, isIncrementallyUnusable);
|
||||
}
|
||||
|
||||
export function start(element: ISyntaxElement, text?: ISimpleText): number {
|
||||
|
||||
Reference in New Issue
Block a user