Improve walking speed in Fidelity.

This commit is contained in:
Cyrus Najmabadi 2014-10-30 13:57:40 -07:00
parent e1dfdb4d25
commit f0ea98f5b2
5 changed files with 195 additions and 206 deletions

View File

@ -52,7 +52,7 @@ module TypeScript.Services.Formatting {
rulesProvider: RulesProvider,
formattingRequestKind: FormattingRequestKind): TextEditInfo[] {
var walker = new Formatter(textSpan, sourceUnit, indentFirstToken, options, snapshot, rulesProvider, formattingRequestKind);
visitNodeOrToken(walker, sourceUnit);
walker.walk(sourceUnit);
return walker.edits();
}

View File

@ -16,7 +16,7 @@
///<reference path='formatting.ts' />
module TypeScript.Services.Formatting {
export class IndentationTrackingWalker extends SyntaxWalker {
export class IndentationTrackingWalker /*extends SyntaxWalker*/ {
private _position: number = 0;
private _parent: IndentationNodeContext = null;
private _textSpan: TextSpan;
@ -26,7 +26,7 @@ module TypeScript.Services.Formatting {
private _text: ISimpleText;
constructor(textSpan: TextSpan, sourceUnit: SourceUnitSyntax, snapshot: ITextSnapshot, indentFirstToken: boolean, public options: FormattingOptions) {
super();
// super();
// Create a pool object to manage context nodes while walking the tree
this._indentationNodeContextPool = new IndentationNodeContextPool();
@ -100,7 +100,23 @@ module TypeScript.Services.Formatting {
this._position += token.fullWidth();
}
public visitNode(node: ISyntaxNode): void {
public walk(element: ISyntaxElement) {
if (element && !isShared(element)) {
if (isToken(element)) {
this.visitToken(<ISyntaxToken>element);
}
else if (element.kind() === SyntaxKind.List || element.kind() === SyntaxKind.SeparatedList) {
for (var i = 0, n = childCount(element); i < n; i++) {
this.walk(childAt(element, i));
}
}
else {
this.visitNode(<ISyntaxNode>element);
}
}
}
private visitNode(node: ISyntaxNode): void {
var nodeSpan = new TextSpan(this._position, fullWidth(node));
if (nodeSpan.intersectsWithTextSpan(this._textSpan)) {
@ -112,7 +128,9 @@ module TypeScript.Services.Formatting {
this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta);
// Visit node
visitNodeOrToken(this, node);
for (var i = 0, n = childCount(node); i < n; i++) {
this.walk(childAt(node, i));
}
// Reset state
this._indentationNodeContextPool.releaseNode(this._parent);

View File

@ -1,21 +1,21 @@
///<reference path='references.ts' />
module TypeScript {
export class DepthLimitedWalker extends SyntaxWalker {
private _depth: number = 0;
private _maximumDepth: number = 0;
//export class DepthLimitedWalker extends SyntaxWalker {
// private _depth: number = 0;
// private _maximumDepth: number = 0;
constructor(maximumDepth: number) {
super();
this._maximumDepth = maximumDepth;
}
// constructor(maximumDepth: number) {
// super();
// this._maximumDepth = maximumDepth;
// }
public visitNode(node: ISyntaxNode): void {
if (this._depth < this._maximumDepth) {
this._depth++;
super.visitNode(node);
this._depth--;
}
}
}
// public visitNode(node: ISyntaxNode): void {
// if (this._depth < this._maximumDepth) {
// this._depth++;
// super.visitNode(node);
// this._depth--;
// }
// }
//}
}

View File

@ -2311,19 +2311,19 @@ function generateWalker(): string {
" export class SyntaxWalker implements ISyntaxVisitor {\r\n" +
" public visitToken(token: ISyntaxToken): void {\r\n" +
" }\r\n" +
"\r\n" +
" public visitNode(node: ISyntaxNode): void {\r\n" +
" visitNodeOrToken(this, node);\r\n" +
" }\r\n" +
"\r\n" +
" public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
" if (isToken(nodeOrToken)) { \r\n" +
" this.visitToken(<ISyntaxToken>nodeOrToken);\r\n" +
" }\r\n" +
" else {\r\n" +
" this.visitNode(<ISyntaxNode>nodeOrToken);\r\n" +
" }\r\n" +
" }\r\n" +
//"\r\n" +
//" public visitNode(node: ISyntaxNode): void {\r\n" +
//" visitNodeOrToken(this, node);\r\n" +
//" }\r\n" +
//"\r\n" +
//" public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
//" if (isToken(nodeOrToken)) { \r\n" +
//" this.visitToken(<ISyntaxToken>nodeOrToken);\r\n" +
//" }\r\n" +
//" else {\r\n" +
//" this.visitNode(<ISyntaxNode>nodeOrToken);\r\n" +
//" }\r\n" +
//" }\r\n" +
"\r\n" +
" private visitOptionalToken(token: ISyntaxToken): void {\r\n" +
" if (token === undefined) {\r\n" +
@ -2332,33 +2332,33 @@ function generateWalker(): string {
"\r\n" +
" this.visitToken(token);\r\n" +
" }\r\n" +
"\r\n" +
" public visitOptionalNode(node: ISyntaxNode): void {\r\n" +
" if (node === undefined) {\r\n" +
" return;\r\n" +
" }\r\n" +
"\r\n" +
" this.visitNode(node);\r\n" +
" }\r\n" +
"\r\n" +
" public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
" if (nodeOrToken === undefined) {\r\n" +
" return;\r\n" +
" }\r\n" +
"\r\n" +
" this.visitNodeOrToken(nodeOrToken);\r\n" +
" }\r\n" +
//"\r\n" +
//" public visitOptionalNode(node: ISyntaxNode): void {\r\n" +
//" if (node === undefined) {\r\n" +
//" return;\r\n" +
//" }\r\n" +
//"\r\n" +
//" this.visitNode(node);\r\n" +
//" }\r\n" +
//"\r\n" +
//" public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {\r\n" +
//" if (nodeOrToken === undefined) {\r\n" +
//" return;\r\n" +
//" }\r\n" +
//"\r\n" +
//" this.visitNodeOrToken(nodeOrToken);\r\n" +
//" }\r\n" +
"\r\n" +
" public visitList(list: ISyntaxNodeOrToken[]): void {\r\n" +
" for (var i = 0, n = list.length; i < n; i++) {\r\n" +
" this.visitNodeOrToken(list[i]);\r\n" +
" visitNodeOrToken(this, list[i]);\r\n" +
" }\r\n" +
" }\r\n" +
"\r\n" +
" public visitSeparatedList(list: ISyntaxNodeOrToken[]): void {\r\n" +
" for (var i = 0, n = childCount(list); i < n; i++) {\r\n" +
" var item = childAt(list, i);\r\n" +
" this.visitNodeOrToken(item);\r\n" +
" visitNodeOrToken(this, item);\r\n" +
" }\r\n" +
" }\r\n";
@ -2386,20 +2386,20 @@ function generateWalker(): string {
result += " this.visitSeparatedList(node." + child.name + ");\r\n";
}
else if (isNodeOrToken(child)) {
if (child.isOptional) {
result += " this.visitOptionalNodeOrToken(node." + child.name + ");\r\n";
}
else {
result += " this.visitNodeOrToken(node." + child.name + ");\r\n";
}
//if (child.isOptional) {
result += " visitNodeOrToken(this, node." + child.name + ");\r\n";
//}
//else {
// result += " this.visitNodeOrToken(node." + child.name + ");\r\n";
//}
}
else if (child.type !== "SyntaxKind") {
if (child.isOptional) {
result += " this.visitOptionalNode(node." + child.name + ");\r\n";
}
else {
result += " this.visitNode(node." + child.name + ");\r\n";
}
//if (child.isOptional) {
result += " visitNodeOrToken(this, node." + child.name + ");\r\n";
//}
//else {
// result += " this.visitNode(node." + child.name + ");\r\n";
//}
}
}

View File

@ -5,19 +5,6 @@ module TypeScript {
public visitToken(token: ISyntaxToken): void {
}
public visitNode(node: ISyntaxNode): void {
visitNodeOrToken(this, node);
}
public visitNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {
if (isToken(nodeOrToken)) {
this.visitToken(<ISyntaxToken>nodeOrToken);
}
else {
this.visitNode(<ISyntaxNode>nodeOrToken);
}
}
private visitOptionalToken(token: ISyntaxToken): void {
if (token === undefined) {
return;
@ -26,32 +13,16 @@ module TypeScript {
this.visitToken(token);
}
public visitOptionalNode(node: ISyntaxNode): void {
if (node === undefined) {
return;
}
this.visitNode(node);
}
public visitOptionalNodeOrToken(nodeOrToken: ISyntaxNodeOrToken): void {
if (nodeOrToken === undefined) {
return;
}
this.visitNodeOrToken(nodeOrToken);
}
public visitList(list: ISyntaxNodeOrToken[]): void {
for (var i = 0, n = list.length; i < n; i++) {
this.visitNodeOrToken(list[i]);
visitNodeOrToken(this, list[i]);
}
}
public visitSeparatedList(list: ISyntaxNodeOrToken[]): void {
for (var i = 0, n = childCount(list); i < n; i++) {
var item = childAt(list, i);
this.visitNodeOrToken(item);
visitNodeOrToken(this, item);
}
}
@ -61,7 +32,7 @@ module TypeScript {
}
public visitQualifiedName(node: QualifiedNameSyntax): void {
this.visitNodeOrToken(node.left);
visitNodeOrToken(this, node.left);
this.visitToken(node.dotToken);
this.visitToken(node.right);
}
@ -73,34 +44,34 @@ module TypeScript {
}
public visitFunctionType(node: FunctionTypeSyntax): void {
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
visitNodeOrToken(this, node.typeParameterList);
visitNodeOrToken(this, node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
}
public visitArrayType(node: ArrayTypeSyntax): void {
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
this.visitToken(node.openBracketToken);
this.visitToken(node.closeBracketToken);
}
public visitConstructorType(node: ConstructorTypeSyntax): void {
this.visitToken(node.newKeyword);
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
visitNodeOrToken(this, node.typeParameterList);
visitNodeOrToken(this, node.parameterList);
this.visitToken(node.equalsGreaterThanToken);
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
}
public visitGenericType(node: GenericTypeSyntax): void {
this.visitNodeOrToken(node.name);
this.visitNode(node.typeArgumentList);
visitNodeOrToken(this, node.name);
visitNodeOrToken(this, node.typeArgumentList);
}
public visitTypeQuery(node: TypeQuerySyntax): void {
this.visitToken(node.typeOfKeyword);
this.visitNodeOrToken(node.name);
visitNodeOrToken(this, node.name);
}
public visitTupleType(node: TupleTypeSyntax): void {
@ -110,14 +81,14 @@ module TypeScript {
}
public visitUnionType(node: UnionTypeSyntax): void {
this.visitNodeOrToken(node.left);
visitNodeOrToken(this, node.left);
this.visitToken(node.barToken);
this.visitNodeOrToken(node.right);
visitNodeOrToken(this, node.right);
}
public visitParenthesizedType(node: ParenthesizedTypeSyntax): void {
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
this.visitToken(node.closeParenToken);
}
@ -125,24 +96,24 @@ module TypeScript {
this.visitList(node.modifiers);
this.visitToken(node.interfaceKeyword);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeParameterList);
visitNodeOrToken(this, node.typeParameterList);
this.visitList(node.heritageClauses);
this.visitNode(node.body);
visitNodeOrToken(this, node.body);
}
public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitToken(node.functionKeyword);
this.visitToken(node.identifier);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
this.visitOptionalToken(node.semicolonToken);
}
public visitModuleDeclaration(node: ModuleDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitToken(node.moduleKeyword);
this.visitOptionalNodeOrToken(node.name);
visitNodeOrToken(this, node.name);
this.visitOptionalToken(node.stringLiteral);
this.visitToken(node.openBraceToken);
this.visitList(node.moduleElements);
@ -153,7 +124,7 @@ module TypeScript {
this.visitList(node.modifiers);
this.visitToken(node.classKeyword);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeParameterList);
visitNodeOrToken(this, node.typeParameterList);
this.visitList(node.heritageClauses);
this.visitToken(node.openBraceToken);
this.visitList(node.classElements);
@ -174,7 +145,7 @@ module TypeScript {
this.visitToken(node.importKeyword);
this.visitToken(node.identifier);
this.visitToken(node.equalsToken);
this.visitNodeOrToken(node.moduleReference);
visitNodeOrToken(this, node.moduleReference);
this.visitOptionalToken(node.semicolonToken);
}
@ -188,28 +159,28 @@ module TypeScript {
public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
this.visitOptionalToken(node.semicolonToken);
}
public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitNode(node.variableDeclarator);
visitNodeOrToken(this, node.variableDeclarator);
this.visitOptionalToken(node.semicolonToken);
}
public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitToken(node.constructorKeyword);
this.visitNode(node.callSignature);
this.visitOptionalNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
this.visitOptionalToken(node.semicolonToken);
}
public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): void {
this.visitList(node.modifiers);
this.visitNode(node.indexSignature);
visitNodeOrToken(this, node.indexSignature);
this.visitOptionalToken(node.semicolonToken);
}
@ -217,46 +188,46 @@ module TypeScript {
this.visitList(node.modifiers);
this.visitToken(node.getKeyword);
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
}
public visitSetAccessor(node: SetAccessorSyntax): void {
this.visitList(node.modifiers);
this.visitToken(node.setKeyword);
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
}
public visitPropertySignature(node: PropertySignatureSyntax): void {
this.visitToken(node.propertyName);
this.visitOptionalToken(node.questionToken);
this.visitOptionalNode(node.typeAnnotation);
visitNodeOrToken(this, node.typeAnnotation);
}
public visitCallSignature(node: CallSignatureSyntax): void {
this.visitOptionalNode(node.typeParameterList);
this.visitNode(node.parameterList);
this.visitOptionalNode(node.typeAnnotation);
visitNodeOrToken(this, node.typeParameterList);
visitNodeOrToken(this, node.parameterList);
visitNodeOrToken(this, node.typeAnnotation);
}
public visitConstructSignature(node: ConstructSignatureSyntax): void {
this.visitToken(node.newKeyword);
this.visitNode(node.callSignature);
visitNodeOrToken(this, node.callSignature);
}
public visitIndexSignature(node: IndexSignatureSyntax): void {
this.visitToken(node.openBracketToken);
this.visitSeparatedList(node.parameters);
this.visitToken(node.closeBracketToken);
this.visitOptionalNode(node.typeAnnotation);
visitNodeOrToken(this, node.typeAnnotation);
}
public visitMethodSignature(node: MethodSignatureSyntax): void {
this.visitToken(node.propertyName);
this.visitOptionalToken(node.questionToken);
this.visitNode(node.callSignature);
visitNodeOrToken(this, node.callSignature);
}
public visitBlock(node: BlockSyntax): void {
@ -268,33 +239,33 @@ module TypeScript {
public visitIfStatement(node: IfStatementSyntax): void {
this.visitToken(node.ifKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
this.visitOptionalNode(node.elseClause);
visitNodeOrToken(this, node.statement);
visitNodeOrToken(this, node.elseClause);
}
public visitVariableStatement(node: VariableStatementSyntax): void {
this.visitList(node.modifiers);
this.visitNode(node.variableDeclaration);
visitNodeOrToken(this, node.variableDeclaration);
this.visitOptionalToken(node.semicolonToken);
}
public visitExpressionStatement(node: ExpressionStatementSyntax): void {
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
}
public visitReturnStatement(node: ReturnStatementSyntax): void {
this.visitToken(node.returnKeyword);
this.visitOptionalNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
}
public visitSwitchStatement(node: SwitchStatementSyntax): void {
this.visitToken(node.switchKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.closeParenToken);
this.visitToken(node.openBraceToken);
this.visitList(node.switchClauses);
@ -316,25 +287,25 @@ module TypeScript {
public visitForStatement(node: ForStatementSyntax): void {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
this.visitOptionalNode(node.variableDeclaration);
this.visitOptionalNodeOrToken(node.initializer);
visitNodeOrToken(this, node.variableDeclaration);
visitNodeOrToken(this, node.initializer);
this.visitToken(node.firstSemicolonToken);
this.visitOptionalNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.secondSemicolonToken);
this.visitOptionalNodeOrToken(node.incrementor);
visitNodeOrToken(this, node.incrementor);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitForInStatement(node: ForInStatementSyntax): void {
this.visitToken(node.forKeyword);
this.visitToken(node.openParenToken);
this.visitOptionalNode(node.variableDeclaration);
this.visitOptionalNodeOrToken(node.left);
visitNodeOrToken(this, node.variableDeclaration);
visitNodeOrToken(this, node.left);
this.visitToken(node.inKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitEmptyStatement(node: EmptyStatementSyntax): void {
@ -343,37 +314,37 @@ module TypeScript {
public visitThrowStatement(node: ThrowStatementSyntax): void {
this.visitToken(node.throwKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitOptionalToken(node.semicolonToken);
}
public visitWhileStatement(node: WhileStatementSyntax): void {
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitTryStatement(node: TryStatementSyntax): void {
this.visitToken(node.tryKeyword);
this.visitNode(node.block);
this.visitOptionalNode(node.catchClause);
this.visitOptionalNode(node.finallyClause);
visitNodeOrToken(this, node.block);
visitNodeOrToken(this, node.catchClause);
visitNodeOrToken(this, node.finallyClause);
}
public visitLabeledStatement(node: LabeledStatementSyntax): void {
this.visitToken(node.identifier);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitDoStatement(node: DoStatementSyntax): void {
this.visitToken(node.doKeyword);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
this.visitToken(node.whileKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
this.visitOptionalToken(node.semicolonToken);
}
@ -386,59 +357,59 @@ module TypeScript {
public visitWithStatement(node: WithStatementSyntax): void {
this.visitToken(node.withKeyword);
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.closeParenToken);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): void {
this.visitToken(node.operatorToken);
this.visitNodeOrToken(node.operand);
visitNodeOrToken(this, node.operand);
}
public visitDeleteExpression(node: DeleteExpressionSyntax): void {
this.visitToken(node.deleteKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
}
public visitTypeOfExpression(node: TypeOfExpressionSyntax): void {
this.visitToken(node.typeOfKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
}
public visitVoidExpression(node: VoidExpressionSyntax): void {
this.visitToken(node.voidKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
}
public visitConditionalExpression(node: ConditionalExpressionSyntax): void {
this.visitNodeOrToken(node.condition);
visitNodeOrToken(this, node.condition);
this.visitToken(node.questionToken);
this.visitNodeOrToken(node.whenTrue);
visitNodeOrToken(this, node.whenTrue);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.whenFalse);
visitNodeOrToken(this, node.whenFalse);
}
public visitBinaryExpression(node: BinaryExpressionSyntax): void {
this.visitNodeOrToken(node.left);
visitNodeOrToken(this, node.left);
this.visitToken(node.operatorToken);
this.visitNodeOrToken(node.right);
visitNodeOrToken(this, node.right);
}
public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): void {
this.visitNodeOrToken(node.operand);
visitNodeOrToken(this, node.operand);
this.visitToken(node.operatorToken);
}
public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): void {
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.dotToken);
this.visitToken(node.name);
}
public visitInvocationExpression(node: InvocationExpressionSyntax): void {
this.visitNodeOrToken(node.expression);
this.visitNode(node.argumentList);
visitNodeOrToken(this, node.expression);
visitNodeOrToken(this, node.argumentList);
}
public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): void {
@ -455,49 +426,49 @@ module TypeScript {
public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): void {
this.visitToken(node.newKeyword);
this.visitNodeOrToken(node.expression);
this.visitOptionalNode(node.argumentList);
visitNodeOrToken(this, node.expression);
visitNodeOrToken(this, node.argumentList);
}
public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): void {
this.visitToken(node.openParenToken);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.closeParenToken);
}
public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): void {
this.visitNode(node.callSignature);
visitNodeOrToken(this, node.callSignature);
this.visitToken(node.equalsGreaterThanToken);
this.visitOptionalNode(node.block);
this.visitOptionalNodeOrToken(node.expression);
visitNodeOrToken(this, node.block);
visitNodeOrToken(this, node.expression);
}
public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): void {
this.visitNode(node.parameter);
visitNodeOrToken(this, node.parameter);
this.visitToken(node.equalsGreaterThanToken);
this.visitOptionalNode(node.block);
this.visitOptionalNodeOrToken(node.expression);
visitNodeOrToken(this, node.block);
visitNodeOrToken(this, node.expression);
}
public visitCastExpression(node: CastExpressionSyntax): void {
this.visitToken(node.lessThanToken);
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
this.visitToken(node.greaterThanToken);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
}
public visitElementAccessExpression(node: ElementAccessExpressionSyntax): void {
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.openBracketToken);
this.visitNodeOrToken(node.argumentExpression);
visitNodeOrToken(this, node.argumentExpression);
this.visitToken(node.closeBracketToken);
}
public visitFunctionExpression(node: FunctionExpressionSyntax): void {
this.visitToken(node.functionKeyword);
this.visitOptionalToken(node.identifier);
this.visitNode(node.callSignature);
this.visitNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
}
public visitOmittedExpression(node: OmittedExpressionSyntax): void {
@ -510,12 +481,12 @@ module TypeScript {
public visitVariableDeclarator(node: VariableDeclaratorSyntax): void {
this.visitToken(node.propertyName);
this.visitOptionalNode(node.typeAnnotation);
this.visitOptionalNode(node.equalsValueClause);
visitNodeOrToken(this, node.typeAnnotation);
visitNodeOrToken(this, node.equalsValueClause);
}
public visitArgumentList(node: ArgumentListSyntax): void {
this.visitOptionalNode(node.typeArgumentList);
visitNodeOrToken(this, node.typeArgumentList);
this.visitToken(node.openParenToken);
this.visitSeparatedList(node.arguments);
this.visitToken(node.closeParenToken);
@ -546,12 +517,12 @@ module TypeScript {
public visitEqualsValueClause(node: EqualsValueClauseSyntax): void {
this.visitToken(node.equalsToken);
this.visitNodeOrToken(node.value);
visitNodeOrToken(this, node.value);
}
public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): void {
this.visitToken(node.caseKeyword);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
this.visitToken(node.colonToken);
this.visitList(node.statements);
}
@ -564,43 +535,43 @@ module TypeScript {
public visitElseClause(node: ElseClauseSyntax): void {
this.visitToken(node.elseKeyword);
this.visitNodeOrToken(node.statement);
visitNodeOrToken(this, node.statement);
}
public visitCatchClause(node: CatchClauseSyntax): void {
this.visitToken(node.catchKeyword);
this.visitToken(node.openParenToken);
this.visitToken(node.identifier);
this.visitOptionalNode(node.typeAnnotation);
visitNodeOrToken(this, node.typeAnnotation);
this.visitToken(node.closeParenToken);
this.visitNode(node.block);
visitNodeOrToken(this, node.block);
}
public visitFinallyClause(node: FinallyClauseSyntax): void {
this.visitToken(node.finallyKeyword);
this.visitNode(node.block);
visitNodeOrToken(this, node.block);
}
public visitTypeParameter(node: TypeParameterSyntax): void {
this.visitToken(node.identifier);
this.visitOptionalNode(node.constraint);
visitNodeOrToken(this, node.constraint);
}
public visitConstraint(node: ConstraintSyntax): void {
this.visitToken(node.extendsKeyword);
this.visitNodeOrToken(node.typeOrExpression);
visitNodeOrToken(this, node.typeOrExpression);
}
public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): void {
this.visitToken(node.propertyName);
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.expression);
visitNodeOrToken(this, node.expression);
}
public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void {
this.visitToken(node.propertyName);
this.visitNode(node.callSignature);
this.visitNode(node.block);
visitNodeOrToken(this, node.callSignature);
visitNodeOrToken(this, node.block);
}
public visitParameter(node: ParameterSyntax): void {
@ -608,18 +579,18 @@ module TypeScript {
this.visitList(node.modifiers);
this.visitToken(node.identifier);
this.visitOptionalToken(node.questionToken);
this.visitOptionalNode(node.typeAnnotation);
this.visitOptionalNode(node.equalsValueClause);
visitNodeOrToken(this, node.typeAnnotation);
visitNodeOrToken(this, node.equalsValueClause);
}
public visitEnumElement(node: EnumElementSyntax): void {
this.visitToken(node.propertyName);
this.visitOptionalNode(node.equalsValueClause);
visitNodeOrToken(this, node.equalsValueClause);
}
public visitTypeAnnotation(node: TypeAnnotationSyntax): void {
this.visitToken(node.colonToken);
this.visitNodeOrToken(node.type);
visitNodeOrToken(this, node.type);
}
public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): void {
@ -630,7 +601,7 @@ module TypeScript {
}
public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): void {
this.visitNodeOrToken(node.moduleName);
visitNodeOrToken(this, node.moduleName);
}
}
}