@@ -334,27 +334,52 @@ module TypeScript {
334
334
return info ;
335
335
}
336
336
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
+
337
357
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
+ }
339
365
366
+ function nodeOrTokenComputeData ( nodeOrToken : ISyntaxNodeOrToken ) {
340
367
var fullWidth = 0 ;
368
+ var slotCount = nodeOrToken . childCount ;
341
369
342
370
// 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 ;
344
372
345
373
for ( var i = 0 , n = slotCount ; i < n ; i ++ ) {
346
- var child = childAt ( element , i ) ;
374
+ var child = nodeOrToken . childAt ( i ) ;
347
375
348
376
if ( child ) {
349
377
fullWidth += TypeScript . fullWidth ( child ) ;
350
-
351
378
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript . isIncrementallyUnusable ( child ) ;
352
379
}
353
380
}
354
381
355
- return ( fullWidth << SyntaxConstants . NodeFullWidthShift )
356
- | ( isIncrementallyUnusable ? SyntaxConstants . NodeIncrementallyUnusableMask : 0 )
357
- | SyntaxConstants . NodeDataComputed ;
382
+ return combineData ( fullWidth , isIncrementallyUnusable ) ;
358
383
}
359
384
360
385
export function start ( element : ISyntaxElement , text ?: ISimpleText ) : number {
0 commit comments