Skip to content

Commit fff8ef8

Browse files
Merge pull request #1063 from Microsoft/nodeCleanup
Node cleanup
2 parents d8080a0 + 5952036 commit fff8ef8

14 files changed

+906
-995
lines changed

src/services/syntax/SyntaxGenerator.js

Lines changed: 16 additions & 96 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/services/syntax/SyntaxGenerator.js.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/services/syntax/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,7 @@ module TypeScript.Parser {
11341134
return isPropertyName(peekToken(modifierCount + 1), inErrorRecovery);
11351135
}
11361136

1137-
function parseAccessor(checkForStrictMode: boolean): ISyntaxNode {
1137+
function parseAccessor(checkForStrictMode: boolean): IAccessorSyntax {
11381138
var modifiers = parseModifiers();
11391139
var _currenToken = currentToken();
11401140
var tokenKind = _currenToken.kind;

src/services/syntax/prettyPrinter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ module TypeScript.PrettyPrinter {
3535
return 1;
3636
}
3737

38-
private newLineCountBetweenStatements(element1: IClassElementSyntax, element2: IClassElementSyntax): number {
38+
private newLineCountBetweenStatements(element1: IStatementSyntax, element2: IStatementSyntax): number {
3939
if (!element1 || !element2) {
4040
return 0;
4141
}

src/services/syntax/references.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
///<reference path='syntaxTrivia.ts' />
2929
///<reference path='syntaxTriviaList.ts' />
3030
///<reference path='syntaxUtilities.ts' />
31-
///<reference path='syntaxUtilities.generated.ts' />
3231
///<reference path='syntaxVisitor.generated.ts' />
3332
///<reference path='syntaxWalker.generated.ts' />
3433

src/services/syntax/scanner.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -219,17 +219,17 @@ module TypeScript.Scanner {
219219
}
220220

221221
class FixedWidthTokenWithNoTrivia implements ISyntaxToken {
222-
public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; public _typeBrand: any; public _syntaxNodeOrTokenBrand: any;
222+
public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; public _typeBrand: any; public _nameBrand: any;
223223
public parent: ISyntaxElement;
224+
public childCount: number;
224225

225226
constructor(private _fullStart: number, public kind: SyntaxKind) {
226227
}
227228

228229
public setFullStart(fullStart: number): void {
229230
this._fullStart = fullStart;
230231
}
231-
232-
public childCount() { return 0 }
232+
233233
public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() }
234234
public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) }
235235

@@ -251,10 +251,12 @@ module TypeScript.Scanner {
251251
public hasTrailingComment(): boolean { return false; }
252252
public clone(): ISyntaxToken { return new FixedWidthTokenWithNoTrivia(this._fullStart, this.kind); }
253253
}
254+
FixedWidthTokenWithNoTrivia.prototype.childCount = 0;
254255

255256
class LargeScannerToken implements ISyntaxToken {
256-
public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; public _typeBrand: any; public _syntaxNodeOrTokenBrand: any;
257+
public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; public _typeBrand: any; public _nameBrand: any;
257258
public parent: ISyntaxElement;
259+
public childCount: number;
258260

259261
private cachedText: string;
260262

@@ -268,7 +270,6 @@ module TypeScript.Scanner {
268270
this._fullStart = fullStart;
269271
}
270272

271-
public childCount() { return 0 }
272273
public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() }
273274
public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) }
274275

@@ -310,6 +311,7 @@ module TypeScript.Scanner {
310311
public hasTrailingComment(): boolean { return largeTokenUnpackHasTrailingComment(this._packedFullWidthAndInfo); }
311312
public clone(): ISyntaxToken { return new LargeScannerToken(this._fullStart, this.kind, this._packedFullWidthAndInfo, this.cachedText); }
312313
}
314+
LargeScannerToken.prototype.childCount = 0;
313315

314316
export interface DiagnosticCallback {
315317
(position: number, width: number, key: string, arguments: any[]): void;

src/services/syntax/syntaxElement.ts

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -144,9 +144,8 @@ module TypeScript {
144144
return <ISyntaxToken>nodeOrToken;
145145
}
146146

147-
var childAtFunction = getChildAtFunction(nodeOrToken);
148147
for (var i = 0, n = childCount(nodeOrToken); i < n; i++) {
149-
var child = childAtFunction(nodeOrToken, i);
148+
var child = nodeOrToken.childAt(i);
150149

151150
if (child) {
152151
var childFullWidth = fullWidth(child);
@@ -335,27 +334,52 @@ module TypeScript {
335334
return info;
336335
}
337336

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+
338357
function computeData(element: ISyntaxElement): number {
339-
var slotCount = childCount(element);
358+
if (isList(element)) {
359+
return listComputeData(<ISyntaxNodeOrToken[]>element);
360+
}
361+
else {
362+
return nodeOrTokenComputeData(<ISyntaxNodeOrToken>element);
363+
}
364+
}
340365

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

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

346373
for (var i = 0, n = slotCount; i < n; i++) {
347-
var child = childAt(element, i);
374+
var child = nodeOrToken.childAt(i);
348375

349376
if (child) {
350377
fullWidth += TypeScript.fullWidth(child);
351-
352378
isIncrementallyUnusable = isIncrementallyUnusable || TypeScript.isIncrementallyUnusable(child);
353379
}
354380
}
355381

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

361385
export function start(element: ISyntaxElement, text?: ISimpleText): number {
@@ -407,22 +431,36 @@ module TypeScript {
407431
}
408432

409433
export interface IModuleElementSyntax extends ISyntaxNode {
434+
_moduleElementBrand: any;
410435
}
411436

412437
export interface IStatementSyntax extends IModuleElementSyntax {
413438
_statementBrand: any;
414439
}
415440

416441
export interface ITypeMemberSyntax extends ISyntaxNode {
442+
_typeMemberBrand: any;
417443
}
418444

419445
export interface IClassElementSyntax extends ISyntaxNode {
446+
_classElementBrand: any;
420447
}
421448

422449
export interface IMemberDeclarationSyntax extends IClassElementSyntax {
450+
_memberDeclarationBrand: any;
423451
}
424452

425-
export interface IPropertyAssignmentSyntax extends IClassElementSyntax {
453+
export interface IPropertyAssignmentSyntax extends ISyntaxNode {
454+
_propertyAssignmentBrand: any;
455+
}
456+
457+
export interface IAccessorSyntax extends IPropertyAssignmentSyntax, IMemberDeclarationSyntax {
458+
_accessorBrand: any;
459+
460+
modifiers: ISyntaxToken[];
461+
propertyName: ISyntaxToken;
462+
callSignature: CallSignatureSyntax;
463+
block: BlockSyntax;
426464
}
427465

428466
export interface ISwitchClauseSyntax extends ISyntaxNode {
@@ -464,5 +502,6 @@ module TypeScript {
464502
}
465503

466504
export interface INameSyntax extends ITypeSyntax {
505+
_nameBrand: any;
467506
}
468507
}

0 commit comments

Comments
 (0)