diff --git a/src/services/formatting/indentationTrackingWalker.ts b/src/services/formatting/indentationTrackingWalker.ts index 2863b2e4fcc..60330872a86 100644 --- a/src/services/formatting/indentationTrackingWalker.ts +++ b/src/services/formatting/indentationTrackingWalker.ts @@ -104,8 +104,8 @@ module TypeScript.Services.Formatting { this.visitToken(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)); + for (var i = 0, n = element.childCount(); i < n; i++) { + this.walk(element.childAt(i)); } } else { @@ -126,8 +126,8 @@ module TypeScript.Services.Formatting { this._parent = this._indentationNodeContextPool.getNode(currentParent, node, this._position, indentation.indentationAmount, indentation.indentationAmountDelta); // Visit node - for (var i = 0, n = childCount(node); i < n; i++) { - this.walk(childAt(node, i)); + for (var i = 0, n = node.childCount(); i < n; i++) { + this.walk(node.childAt(i)); } // Reset state diff --git a/src/services/syntax/incrementalParser.ts b/src/services/syntax/incrementalParser.ts index 6c6d81c0fef..29bdfefc23c 100644 --- a/src/services/syntax/incrementalParser.ts +++ b/src/services/syntax/incrementalParser.ts @@ -66,7 +66,7 @@ module TypeScript.IncrementalParser { // Start the cursor pointing at the first element in the source unit (if it exists). if (oldSourceUnit.moduleElements.length > 0) { - _oldSourceUnitCursor.pushElement(childAt(oldSourceUnit.moduleElements, 0), /*indexInParent:*/ 0); + _oldSourceUnitCursor.pushElement(oldSourceUnit.moduleElements.childAt(0), /*indexInParent:*/ 0); } // In general supporting multiple individual edits is just not that important. So we @@ -719,8 +719,8 @@ module TypeScript.IncrementalParser { // Either the node has some existent child, then move to it. if it doesn't, then it's // an empty node. Conceptually the first child of an empty node is really just the // next sibling of the empty node. - for (var i = 0, n = childCount(nodeOrToken); i < n; i++) { - var child = childAt(nodeOrToken, i); + for (var i = 0, n = nodeOrToken.childCount(); i < n; i++) { + var child = nodeOrToken.childAt(i); if (child && !isShared(child)) { // Great, we found a real child. Push that. pushElement(child, /*indexInParent:*/ i); @@ -746,8 +746,8 @@ module TypeScript.IncrementalParser { var parent = currentPiece.element.parent; // We start searching at the index one past our own index in the parent. - for (var i = currentPiece.indexInParent + 1, n = childCount(parent); i < n; i++) { - var sibling = childAt(parent, i); + for (var i = currentPiece.indexInParent + 1, n = parent.childCount(); i < n; i++) { + var sibling = parent.childAt(i); if (sibling && !isShared(sibling)) { // We found a good sibling that we can move to. Just reuse our existing piece @@ -782,7 +782,7 @@ module TypeScript.IncrementalParser { // we make sure to filter that out before pushing any children. // Debug.assert(childCount(element) > 0); - pushElement(childAt(element, 0), /*indexInParent:*/ 0); + pushElement(element.childAt(0), /*indexInParent:*/ 0); } } diff --git a/src/services/syntax/parser.ts b/src/services/syntax/parser.ts index 74387549d9c..b67d56e636e 100644 --- a/src/services/syntax/parser.ts +++ b/src/services/syntax/parser.ts @@ -594,8 +594,8 @@ module TypeScript.Parser { } else if (isSeparatedList(parent)) { var list2 = parent; - for (var i = 0, n = childCount(list2); i < n; i++) { - if (childAt(list2, i) === oldToken) { + for (var i = 0, n = list2.childCount(); i < n; i++) { + if (list2.childAt(i) === oldToken) { if (i % 2 === 0) { list2[i / 2] = newToken; } diff --git a/src/services/syntax/prettyPrinter.ts b/src/services/syntax/prettyPrinter.ts index 647590f5fcc..2c0441b28f5 100644 --- a/src/services/syntax/prettyPrinter.ts +++ b/src/services/syntax/prettyPrinter.ts @@ -52,7 +52,7 @@ module TypeScript.PrettyPrinter { return 0; } - if (childCount(element1.statements) === 0) { + if (element1.statements.childCount() === 0) { return 1; } @@ -131,12 +131,12 @@ module TypeScript.PrettyPrinter { } private appendSpaceList(list: ISyntaxNodeOrToken[]): void { - for (var i = 0, n = childCount(list); i < n; i++) { - if (isNode(childAt(list, i))) { - this.appendNode(childAt(list, i)); + for (var i = 0, n = list.childCount(); i < n; i++) { + if (isNode(list.childAt(i))) { + this.appendNode(list.childAt(i)); } else { - this.appendToken(childAt(list, i)); + this.appendToken(list.childAt(i)); } this.ensureSpace(); @@ -144,31 +144,31 @@ module TypeScript.PrettyPrinter { } private appendSeparatorSpaceList(list: ISyntaxNodeOrToken[]): void { - for (var i = 0, n = childCount(list); i < n; i++) { + for (var i = 0, n = list.childCount(); i < n; i++) { if (i % 2 === 0) { if (i > 0) { this.ensureSpace(); } - visitNodeOrToken(this, childAt(list, i)); + visitNodeOrToken(this, list.childAt(i)); } else { - this.appendToken(childAt(list, i)); + this.appendToken(list.childAt(i)); } } } private appendSeparatorNewLineList(list: ISyntaxNodeOrToken[]): void { - for (var i = 0, n = childCount(list); i < n; i++) { + for (var i = 0, n = list.childCount(); i < n; i++) { if (i % 2 === 0) { if (i > 0) { this.ensureNewLine(); } - visitNodeOrToken(this, childAt(list, i)); + visitNodeOrToken(this, list.childAt(i)); } else { - this.appendToken(childAt(list, i)); + this.appendToken(list.childAt(i)); } } } @@ -277,8 +277,8 @@ module TypeScript.PrettyPrinter { this.ensureSpace(); } - for (var i = 0, n = childCount(node.typeMembers); i < n; i++) { - visitNodeOrToken(this, childAt(node.typeMembers, i)); + for (var i = 0, n = node.typeMembers.childCount(); i < n; i++) { + visitNodeOrToken(this, node.typeMembers.childAt(i)); if (appendNewLines) { this.ensureNewLine(); @@ -774,11 +774,11 @@ module TypeScript.PrettyPrinter { } private appendSwitchClauseStatements(node: ISwitchClauseSyntax): void { - if (childCount(node.statements) === 1 && childAt(node.statements, 0).kind() === SyntaxKind.Block) { + if (node.statements.childCount() === 1 && node.statements.childAt(0).kind() === SyntaxKind.Block) { this.ensureSpace(); - visitNodeOrToken(this, childAt(node.statements, 0)); + visitNodeOrToken(this, node.statements.childAt(0)); } - else if (childCount(node.statements) > 0) { + else if (node.statements.childCount() > 0) { this.ensureNewLine(); this.indentation++; @@ -910,12 +910,12 @@ module TypeScript.PrettyPrinter { public visitObjectLiteralExpression(node: ObjectLiteralExpressionSyntax): void { this.appendToken(node.openBraceToken); - if (childCount(node.propertyAssignments) === 1) { + if (node.propertyAssignments.childCount() === 1) { this.ensureSpace(); - visitNodeOrToken(this, childAt(node.propertyAssignments, 0)); + visitNodeOrToken(this, node.propertyAssignments.childAt(0)); this.ensureSpace(); } - else if (childCount(node.propertyAssignments) > 0) { + else if (node.propertyAssignments.childCount() > 0) { this.indentation++; this.ensureNewLine(); this.appendSeparatorNewLineList(node.propertyAssignments); diff --git a/src/services/syntax/scanner.ts b/src/services/syntax/scanner.ts index 62959e458ff..26ede31047d 100644 --- a/src/services/syntax/scanner.ts +++ b/src/services/syntax/scanner.ts @@ -255,6 +255,10 @@ module TypeScript.Scanner { this._packedData = fixedWidthTokenPackData(fullStart, this.kind()); } + public childCount() { return 0 } + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } + public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) } + public isIncrementallyUnusable(): boolean { return false; } public isKeywordConvertedToIdentifier(): boolean { return false; } public hasSkippedToken(): boolean { return false; } @@ -290,6 +294,10 @@ module TypeScript.Scanner { largeTokenUnpackTriviaInfo(this._packedFullStartAndInfo)); } + public childCount() { return 0 } + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } + public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) } + private syntaxTreeText(text: ISimpleText) { var result = text || syntaxTree(this).text; Debug.assert(result); diff --git a/src/services/syntax/syntax.ts b/src/services/syntax/syntax.ts index 87974c850f7..96301d0c19c 100644 --- a/src/services/syntax/syntax.ts +++ b/src/services/syntax/syntax.ts @@ -4,8 +4,8 @@ module TypeScript.Syntax { export var _nextSyntaxID: number = 1; export function childIndex(parent: ISyntaxElement, child: ISyntaxElement) { - for (var i = 0, n = childCount(parent); i < n; i++) { - var current = childAt(parent, i); + for (var i = 0, n = parent.childCount(); i < n; i++) { + var current = parent.childAt(i); if (current === child) { return i; } @@ -15,8 +15,8 @@ module TypeScript.Syntax { } export function nodeHasSkippedOrMissingTokens(node: ISyntaxNode): boolean { - for (var i = 0; i < childCount(node); i++) { - var child = childAt(node, i); + for (var i = 0; i < node.childCount(); i++) { + var child = node.childAt(i); if (isToken(child)) { var token = child; // If a token is skipped, return true. Or if it is a missing token. The only empty token that is not missing is EOF diff --git a/src/services/syntax/syntaxElement.ts b/src/services/syntax/syntaxElement.ts index 53d16e7ef67..283307281d0 100644 --- a/src/services/syntax/syntaxElement.ts +++ b/src/services/syntax/syntaxElement.ts @@ -11,36 +11,6 @@ module TypeScript { return (kind === SyntaxKind.List || kind === SyntaxKind.SeparatedList) && (element).length === 0; } - export function childCount(element: ISyntaxElement): number { - var kind = element.kind(); - if (kind === SyntaxKind.List) { - return (element).length; - } - else if (kind === SyntaxKind.SeparatedList) { - return (element).length + (element).separators.length; - } - else if (kind >= SyntaxKind.FirstToken && kind <= SyntaxKind.LastToken) { - return 0; - } - else { - return nodeMetadata[kind].length; - } - } - - export function childAt(element: ISyntaxElement, index: number): ISyntaxElement { - var kind = element.kind(); - if (kind === SyntaxKind.List) { - return (element)[index]; - } - else if (kind === SyntaxKind.SeparatedList) { - return (index % 2 === 0) ? (element)[index / 2] : (element).separators[(index - 1) / 2]; - } - else { - // Debug.assert(isNode(element)); - return (element)[nodeMetadata[element.kind()][index]]; - } - } - export function syntaxTree(element: ISyntaxElement): SyntaxTree { if (element) { Debug.assert(!isShared(element)); @@ -179,8 +149,8 @@ module TypeScript { } // Consider: we could use a binary search here to find the child more quickly. - for (var i = 0, n = childCount(element); i < n; i++) { - var child = childAt(element, i); + for (var i = 0, n = element.childCount(); i < n; i++) { + var child = element.childAt(i); if (child) { var childFullWidth = fullWidth(child); @@ -278,8 +248,8 @@ module TypeScript { elements.push((element).fullText(text)); } else { - for (var i = 0, n = childCount(element); i < n; i++) { - collectTextElements(childAt(element, i), elements, text); + for (var i = 0, n = element.childCount(); i < n; i++) { + collectTextElements(element.childAt(i), elements, text); } } } @@ -314,37 +284,10 @@ module TypeScript { return fullWidth(element) > 0 || element.kind() === SyntaxKind.EndOfFileToken ? element : undefined; } - if (kind === SyntaxKind.List) { - var array = element; - for (var i = 0, n = array.length; i < n; i++) { - var token = firstToken(array[i]); - if (token) { - return token; - } - } - } - else if (kind === SyntaxKind.SeparatedList) { - var array = element; - var separators = array.separators; - for (var i = 0, n = array.length + separators.length; i < n; i++) { - var token = firstToken(i % 2 === 0 ? array[i / 2] : separators[(i - 1) / 2]); - if (token) { - return token; - } - } - } - else { - var metadata = nodeMetadata[kind]; - for (var i = 0, n = metadata.length; i < n; i++) { - var child = (element)[metadata[i]]; - var token = firstToken(child); - if (token) { - return token; - } - } - - if (element.kind() === SyntaxKind.SourceUnit) { - return (element).endOfFileToken; + for (var i = 0, n = element.childCount(); i < n; i++) { + var token = firstToken(element.childAt(i)); + if (token) { + return token; } } } @@ -361,8 +304,8 @@ module TypeScript { return (element).endOfFileToken; } - for (var i = childCount(element) - 1; i >= 0; i--) { - var child = childAt(element, i); + for (var i = element.childCount() - 1; i >= 0; i--) { + var child = element.childAt(i); if (child) { var token = lastToken(child); if (token) { @@ -426,7 +369,7 @@ module TypeScript { } function computeData(element: ISyntaxElement): number { - var slotCount = childCount(element); + var slotCount = element.childCount(); var fullWidth = 0; @@ -434,7 +377,7 @@ module TypeScript { var isIncrementallyUnusable = slotCount === 0; for (var i = 0, n = slotCount; i < n; i++) { - var child = childAt(element, i); + var child = element.childAt(i); if (child) { fullWidth += TypeScript.fullWidth(child); @@ -485,6 +428,8 @@ module TypeScript { export interface ISyntaxElement { kind(): SyntaxKind; parent?: ISyntaxElement; + childCount(): number; + childAt(index: number): ISyntaxElement; } export interface ISyntaxNode extends ISyntaxNodeOrToken { diff --git a/src/services/syntax/syntaxGenerator.ts b/src/services/syntax/syntaxGenerator.ts index 667b2563839..9bf7256c42f 100644 --- a/src/services/syntax/syntaxGenerator.ts +++ b/src/services/syntax/syntaxGenerator.ts @@ -1,8 +1,9 @@ -/// -/// +/// +/// +/// /// /// -/// +// /// // Adds argument checking to the generated nodes. Argument checking appears to slow things down // parsing about 7%. If we want to get that perf back, we can always remove this. @@ -32,7 +33,7 @@ interface IMemberDefinition { excludeFromAST?: boolean; } -var interfaces: TypeScript.IIndexable = { +var interfaces: any = { IMemberDeclarationSyntax: 'IClassElementSyntax', IStatementSyntax: 'IModuleElementSyntax', INameSyntax: 'ITypeSyntax', @@ -1560,22 +1561,34 @@ function generateBrands(definition: ITypeDefinition, accessibility: boolean): st return properties; } +function generateAcceptMethod(definition: ITypeDefinition): string { + var result = ""; + + if (!hasKind) { + result += "\r\n"; + result += " public accept(visitor: ISyntaxVisitor): SyntaxKind {\r\n"; + result += " return visitor.visit" + getNameWithoutSuffix(definition) + "(this);\r\n"; + result += " }\r\n"; + } + + return result; +} + function generateKindMethod(definition: ITypeDefinition): string { var result = ""; - //if (!hasKind) { - // result += "\r\n"; - // result += " public get kind(): SyntaxKind {\r\n"; - // result += " return SyntaxKind." + getNameWithoutSuffix(definition) + ";\r\n"; - // result += " }\r\n"; - //} + if (!hasKind) { + result += "\r\n"; + result += " public kind(): SyntaxKind {\r\n"; + result += " return SyntaxKind." + getNameWithoutSuffix(definition) + ";\r\n"; + result += " }\r\n"; + } return result; } function generateSlotMethods(definition: ITypeDefinition): string { var result = ""; - return result; result += "\r\n"; result += " public childCount(): number {\r\n"; @@ -1973,6 +1986,11 @@ function generateNode(definition: ITypeDefinition, abstract: boolean): string { } result += " }\r\n"; + + result += generateKindMethod(definition); + result += generateSlotMethods(definition); + result += generateAcceptMethod(definition); + result += " }"; return result; } @@ -2020,6 +2038,7 @@ function generateSyntaxInterfaces(): string { result += "\r\n\r\n"; + /* result += " export var nodeMetadata: string[][] = ["; for (var i = 0; i <= TypeScript.SyntaxKind.LastNode; i++) { if (i < TypeScript.SyntaxKind.FirstNode) { @@ -2039,6 +2058,7 @@ function generateSyntaxInterfaces(): string { result += metadata; } result += "];\r\n\r\n"; + */ result += " export module Syntax {\r\n" @@ -2111,7 +2131,7 @@ function generateNodes(abstract: boolean): string { result += generateNode(definition, abstract); } - + /* result += "\r\n\r\n "; for (var i = 0; i < definitions.length; i++) { @@ -2128,9 +2148,9 @@ function generateNodes(abstract: boolean): string { result += "(" + definition.name + ").prototype.__kind = SyntaxKind." + getNameWithoutSuffix(definition) } - result += ";\r\n"; + result += ";\r\n";*/ - result += "}"; + result += "\r\n}"; return result; } @@ -2285,16 +2305,28 @@ function generateWalker(): string { " this.visitToken(token);\r\n" + " }\r\n" + "\r\n" + +" private visitOptionalNode(node: ISyntaxNode): void {\r\n" + +" if (node === undefined) {\r\n" + +" return;\r\n" + +" }\r\n" + +"\r\n" + +" node.accept(this);\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" + -" visitNodeOrToken(this, list[i]);\r\n" + +" list[i].accept(this);\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" + -" visitNodeOrToken(this, item);\r\n" + +" for (var i = 0, n = separatedListChildCount(list); i < n; i++) {\r\n" + +" if (i % 2 === 0) {\r\n" + +" list[i >> 1].accept(this);\r\n" + +" }\r\n" + +" else {\r\n" + +" this.visitToken(list.separators[i >> 1]);\r\n" + +" }\r\n" + " }\r\n" + " }\r\n"; @@ -2322,10 +2354,28 @@ function generateWalker(): string { result += " this.visitSeparatedList(node." + child.name + ");\r\n"; } else if (isNodeOrToken(child)) { - result += " visitNodeOrToken(this, node." + child.name + ");\r\n"; + if (child.isOptional) { + result += " visitNodeOrToken(this, node." + child.name + ");\r\n"; + } + else { + result += " node." + child.name + ".accept(this);\r\n"; + } + } + else if (child.type === "ISyntaxToken") { + if (child.isOptional) { + result += " this.visitOptionalToken(node." + child.name + ");\r\n"; + } + else { + result += " this.visitToken(node." + child.name + ");\r\n"; + } } else if (child.type !== "SyntaxKind") { - result += " visitNodeOrToken(this, node." + child.name + ");\r\n"; + if (child.isOptional) { + result += " this.visitOptionalNode(node." + child.name + ");\r\n"; + } + else { + result += " node." + child.name + ".accept(this);\r\n"; + } } } @@ -2346,7 +2396,7 @@ function firstEnumName(e: any, value: number) { } function groupBy(array: T[], func: (v: T) => string): any { - var result: TypeScript.IIndexable = {}; + var result: any = {}; for (var i = 0, n = array.length; i < n; i++) { var v: any = array[i]; @@ -2485,6 +2535,8 @@ function generateVisitor(): string { result += "module TypeScript {\r\n"; result += " export function visitNodeOrToken(visitor: ISyntaxVisitor, element: ISyntaxNodeOrToken): any {\r\n"; result += " if (element === undefined) { return undefined; }\r\n"; + result += " return element.accept(visitor);\r\n"; + /* result += " if (isToken(element)) { return visitor.visitToken(element); }\r\n"; result += " switch (element.kind()) {\r\n"; @@ -2507,13 +2559,14 @@ function generateVisitor(): string { result += " }\r\n\r\n"; result += " throw Errors.invalidOperation();\r\n"; + */ result += " }\r\n\r\n"; result += " export interface ISyntaxVisitor {\r\n"; result += " visitToken(token: ISyntaxToken): any;\r\n"; - for (i = 0; i < definitions.length; i++) { - definition = definitions[i]; + for (var i = 0; i < definitions.length; i++) { + var definition = definitions[i]; result += " visit" + getNameWithoutSuffix(definition) + "(node: " + definition.name + "): any;\r\n"; } @@ -2669,8 +2722,8 @@ function generateIsTypeScriptSpecific(): string { result += "module TypeScript {\r\n"; result += " function isSeparatedListTypeScriptSpecific(list: ISyntaxNodeOrToken[]): boolean {\r\n" - result += " for (var i = 0, n = childCount(list); i < n; i++) {\r\n"; - result += " if (isTypeScriptSpecific(childAt(list, i))) {\r\n"; + result += " for (var i = 0, n = list.childCount(); i < n; i++) {\r\n"; + result += " if (isTypeScriptSpecific(list.childAt(i))) {\r\n"; result += " return true;\r\n"; result += " }\r\n"; result += " }\r\n\r\n"; @@ -2823,7 +2876,6 @@ function generateIsTypeScriptSpecificMethod(definition: ITypeDefinition): string } var syntaxNodesConcrete = generateNodes(/*abstract:*/ false); -var syntaxNodesAbstract = generateNodes(/*abstract:*/ true); var syntaxInterfaces = generateSyntaxInterfaces(); var rewriter = generateRewriter(); var walker = generateWalker(); @@ -2832,12 +2884,11 @@ var visitor = generateVisitor(); var defaultVisitor = generateDefaultVisitor(); var servicesUtilities = generateServicesUtilities(); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\syntaxNodes.concrete.generated.ts", syntaxNodesConcrete, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\syntaxNodes.abstract.generated.ts", syntaxNodesAbstract, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\syntaxNodes.interfaces.generated.ts", syntaxInterfaces, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\services\\syntaxRewriter.generated.ts", rewriter, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\syntaxWalker.generated.ts", walker, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\scannerUtilities.generated.ts", scannerUtilities, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\syntaxVisitor.generated.ts", visitor, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\compiler\\syntax\\defaultSyntaxVisitor.generated.ts", defaultVisitor, false); -TypeScript.Environment.writeFile(TypeScript.Environment.currentDirectory() + "\\src\\services\\syntaxUtilities.generated.ts", servicesUtilities, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxNodes.concrete.generated.ts", syntaxNodesConcrete, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxNodes.interfaces.generated.ts", syntaxInterfaces, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxRewriter.generated.ts", rewriter, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxWalker.generated.ts", walker, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\scannerUtilities.generated.ts", scannerUtilities, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxVisitor.generated.ts", visitor, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\defaultSyntaxVisitor.generated.ts", defaultVisitor, false); +sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxUtilities.generated.ts", servicesUtilities, false); diff --git a/src/services/syntax/syntaxList.ts b/src/services/syntax/syntaxList.ts index df33153def6..6e3761ad056 100644 --- a/src/services/syntax/syntaxList.ts +++ b/src/services/syntax/syntaxList.ts @@ -9,6 +9,19 @@ interface Array { separatorCount(): number; separatorAt(index: number): TypeScript.ISyntaxToken; + + childCount(): number; + childAt(index: number): TypeScript.ISyntaxNodeOrToken; +} + +module TypeScript { + export function separatedListChildCount(list: ISyntaxNodeOrToken[]) { + return list.length + list.separators.length; + } + + export function separatedListChildAt(list: ISyntaxNodeOrToken[], index: number) { + return index % 2 === 0 ? list[index >> 1] : list.separators[index >> 1]; + } } module TypeScript.Syntax { @@ -29,6 +42,19 @@ module TypeScript.Syntax { return this.separators === undefined ? SyntaxKind.List : SyntaxKind.SeparatedList; } + Array.prototype.childCount = function (): number { + return this.separators ? separatedListChildCount(this) : this.length; + } + + Array.prototype.childAt = function (index: number): ISyntaxNodeOrToken { + if (this.separators) { + return index % 2 === 0 ? this[index >> 1] : this.separators[index >> 1]; + } + else { + return this[index]; + } + } + Array.prototype.separatorCount = function (): number { assertEmptyLists(); // Debug.assert(this.kind === SyntaxKind.SeparatedList); diff --git a/src/services/syntax/syntaxNode.ts b/src/services/syntax/syntaxNode.ts index 464c59793aa..ea1cd17db5b 100644 --- a/src/services/syntax/syntaxNode.ts +++ b/src/services/syntax/syntaxNode.ts @@ -2,7 +2,7 @@ module TypeScript { export class SyntaxNode implements ISyntaxNodeOrToken { - private __kind: SyntaxKind; + // private __kind: SyntaxKind; public data: number; public parent: ISyntaxElement; @@ -13,7 +13,19 @@ module TypeScript { } public kind(): SyntaxKind { - return this.__kind; + throw Errors.abstract(); + } + + public childCount(): number { + throw Errors.abstract(); + } + + public childAt(index: number): ISyntaxElement { + throw Errors.abstract(); + } + + public accept(visitor: ISyntaxVisitor): any { + throw Errors.abstract(); } } } \ No newline at end of file diff --git a/src/services/syntax/syntaxNodeOrToken.ts b/src/services/syntax/syntaxNodeOrToken.ts index 695268d843f..2c2a6f808bd 100644 --- a/src/services/syntax/syntaxNodeOrToken.ts +++ b/src/services/syntax/syntaxNodeOrToken.ts @@ -2,5 +2,6 @@ module TypeScript { export interface ISyntaxNodeOrToken extends ISyntaxElement { + accept(visitor: ISyntaxVisitor): any; } } \ No newline at end of file diff --git a/src/services/syntax/syntaxNodes.abstract.generated.ts b/src/services/syntax/syntaxNodes.abstract.generated.ts deleted file mode 100644 index 158ff7bf1c3..00000000000 --- a/src/services/syntax/syntaxNodes.abstract.generated.ts +++ /dev/null @@ -1,1225 +0,0 @@ -/// - -module TypeScript.Syntax.Abstract { - // Inject this module as the factory for producing syntax nodes in the parser. - Parser.syntaxFactory = Abstract; - export var isConcrete: boolean = false; - - export class SourceUnitSyntax extends SyntaxNode { - public syntaxTree: SyntaxTree = undefined; - public moduleElements: IModuleElementSyntax[]; - public endOfFileToken: ISyntaxToken; - constructor(data: number, moduleElements: IModuleElementSyntax[], endOfFileToken: ISyntaxToken) { - super(data); - this.parent = undefined, - this.moduleElements = moduleElements, - this.endOfFileToken = endOfFileToken, - !isShared(moduleElements) && (moduleElements.parent = this), - endOfFileToken.parent = this; - } - } - export class QualifiedNameSyntax extends SyntaxNode implements INameSyntax { - public left: INameSyntax; - public dotToken: ISyntaxToken; - public right: ISyntaxToken; - public _nameBrand: any; public _typeBrand: any; - constructor(data: number, left: INameSyntax, dotToken: ISyntaxToken, right: ISyntaxToken) { - super(data); - this.left = left, - this.right = right, - left.parent = this, - right.parent = this; - } - } - export class ObjectTypeSyntax extends SyntaxNode implements ITypeSyntax { - public openBraceToken: ISyntaxToken; - public typeMembers: ITypeMemberSyntax[]; - public closeBraceToken: ISyntaxToken; - public _typeBrand: any; - constructor(data: number, openBraceToken: ISyntaxToken, typeMembers: ITypeMemberSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.typeMembers = typeMembers, - !isShared(typeMembers) && (typeMembers.parent = this); - } - } - export class FunctionTypeSyntax extends SyntaxNode implements ITypeSyntax { - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public type: ITypeSyntax; - public _typeBrand: any; - constructor(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { - super(data); - this.typeParameterList = typeParameterList, - this.parameterList = parameterList, - this.type = type, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - type.parent = this; - } - } - export class ArrayTypeSyntax extends SyntaxNode implements ITypeSyntax { - public type: ITypeSyntax; - public openBracketToken: ISyntaxToken; - public closeBracketToken: ISyntaxToken; - public _typeBrand: any; - constructor(data: number, type: ITypeSyntax, openBracketToken: ISyntaxToken, closeBracketToken: ISyntaxToken) { - super(data); - this.type = type, - type.parent = this; - } - } - export class ConstructorTypeSyntax extends SyntaxNode implements ITypeSyntax { - public newKeyword: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public type: ITypeSyntax; - public _typeBrand: any; - constructor(data: number, newKeyword: ISyntaxToken, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, equalsGreaterThanToken: ISyntaxToken, type: ITypeSyntax) { - super(data); - this.typeParameterList = typeParameterList, - this.parameterList = parameterList, - this.type = type, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - type.parent = this; - } - } - export class GenericTypeSyntax extends SyntaxNode implements ITypeSyntax { - public name: INameSyntax; - public typeArgumentList: TypeArgumentListSyntax; - public _typeBrand: any; - constructor(data: number, name: INameSyntax, typeArgumentList: TypeArgumentListSyntax) { - super(data); - this.name = name, - this.typeArgumentList = typeArgumentList, - name.parent = this, - typeArgumentList.parent = this; - } - } - export class TypeQuerySyntax extends SyntaxNode implements ITypeSyntax { - public typeOfKeyword: ISyntaxToken; - public name: INameSyntax; - public _typeBrand: any; - constructor(data: number, typeOfKeyword: ISyntaxToken, name: INameSyntax) { - super(data); - this.name = name, - name.parent = this; - } - } - export class TupleTypeSyntax extends SyntaxNode implements ITypeSyntax { - public openBracketToken: ISyntaxToken; - public types: ITypeSyntax[]; - public closeBracketToken: ISyntaxToken; - public _typeBrand: any; - constructor(data: number, openBracketToken: ISyntaxToken, types: ITypeSyntax[], closeBracketToken: ISyntaxToken) { - super(data); - this.types = types, - !isShared(types) && (types.parent = this); - } - } - export class UnionTypeSyntax extends SyntaxNode implements ITypeSyntax { - public left: ITypeSyntax; - public barToken: ISyntaxToken; - public right: ITypeSyntax; - public _typeBrand: any; - constructor(data: number, left: ITypeSyntax, barToken: ISyntaxToken, right: ITypeSyntax) { - super(data); - this.left = left, - this.right = right, - left.parent = this, - right.parent = this; - } - } - export class ParenthesizedTypeSyntax extends SyntaxNode implements ITypeSyntax { - public openParenToken: ISyntaxToken; - public type: ITypeSyntax; - public closeParenToken: ISyntaxToken; - public _typeBrand: any; - constructor(data: number, openParenToken: ISyntaxToken, type: ITypeSyntax, closeParenToken: ISyntaxToken) { - super(data); - this.type = type, - type.parent = this; - } - } - export class InterfaceDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxToken[]; - public interfaceKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public heritageClauses: HeritageClauseSyntax[]; - public body: ObjectTypeSyntax; - public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], interfaceKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], body: ObjectTypeSyntax) { - super(data); - this.modifiers = modifiers, - this.identifier = identifier, - this.typeParameterList = typeParameterList, - this.heritageClauses = heritageClauses, - this.body = body, - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - typeParameterList && (typeParameterList.parent = this), - !isShared(heritageClauses) && (heritageClauses.parent = this), - body.parent = this; - } - } - export class FunctionDeclarationSyntax extends SyntaxNode implements IStatementSyntax { - public modifiers: ISyntaxToken[]; - public functionKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.identifier = identifier, - this.callSignature = callSignature, - this.block = block, - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - callSignature.parent = this, - block && (block.parent = this); - } - } - export class ModuleDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxToken[]; - public moduleKeyword: ISyntaxToken; - public name: INameSyntax; - public stringLiteral: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public moduleElements: IModuleElementSyntax[]; - public closeBraceToken: ISyntaxToken; - public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], moduleKeyword: ISyntaxToken, name: INameSyntax, stringLiteral: ISyntaxToken, openBraceToken: ISyntaxToken, moduleElements: IModuleElementSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.name = name, - this.stringLiteral = stringLiteral, - this.moduleElements = moduleElements, - !isShared(modifiers) && (modifiers.parent = this), - name && (name.parent = this), - stringLiteral && (stringLiteral.parent = this), - !isShared(moduleElements) && (moduleElements.parent = this); - } - } - export class ClassDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxToken[]; - public classKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public typeParameterList: TypeParameterListSyntax; - public heritageClauses: HeritageClauseSyntax[]; - public openBraceToken: ISyntaxToken; - public classElements: IClassElementSyntax[]; - public closeBraceToken: ISyntaxToken; - public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], classKeyword: ISyntaxToken, identifier: ISyntaxToken, typeParameterList: TypeParameterListSyntax, heritageClauses: HeritageClauseSyntax[], openBraceToken: ISyntaxToken, classElements: IClassElementSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.identifier = identifier, - this.typeParameterList = typeParameterList, - this.heritageClauses = heritageClauses, - this.classElements = classElements, - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - typeParameterList && (typeParameterList.parent = this), - !isShared(heritageClauses) && (heritageClauses.parent = this), - !isShared(classElements) && (classElements.parent = this); - } - } - export class EnumDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxToken[]; - public enumKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public enumElements: EnumElementSyntax[]; - public closeBraceToken: ISyntaxToken; - public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], enumKeyword: ISyntaxToken, identifier: ISyntaxToken, openBraceToken: ISyntaxToken, enumElements: EnumElementSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.identifier = identifier, - this.enumElements = enumElements, - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - !isShared(enumElements) && (enumElements.parent = this); - } - } - export class ImportDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { - public modifiers: ISyntaxToken[]; - public importKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public equalsToken: ISyntaxToken; - public moduleReference: IModuleReferenceSyntax; - public semicolonToken: ISyntaxToken; - public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], importKeyword: ISyntaxToken, identifier: ISyntaxToken, equalsToken: ISyntaxToken, moduleReference: IModuleReferenceSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.identifier = identifier, - this.moduleReference = moduleReference, - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - moduleReference.parent = this; - } - } - export class ExportAssignmentSyntax extends SyntaxNode implements IModuleElementSyntax { - public exportKeyword: ISyntaxToken; - public equalsToken: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - public _moduleElementBrand: any; - constructor(data: number, exportKeyword: ISyntaxToken, equalsToken: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { - super(data); - this.identifier = identifier, - identifier.parent = this; - } - } - export class MemberFunctionDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { - public modifiers: ISyntaxToken[]; - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - public _memberDeclarationBrand: any; public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.propertyName = propertyName, - this.callSignature = callSignature, - this.block = block, - !isShared(modifiers) && (modifiers.parent = this), - propertyName.parent = this, - callSignature.parent = this, - block && (block.parent = this); - } - } - export class MemberVariableDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { - public modifiers: ISyntaxToken[]; - public variableDeclarator: VariableDeclaratorSyntax; - public semicolonToken: ISyntaxToken; - public _memberDeclarationBrand: any; public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], variableDeclarator: VariableDeclaratorSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.variableDeclarator = variableDeclarator, - !isShared(modifiers) && (modifiers.parent = this), - variableDeclarator.parent = this; - } - } - export class ConstructorDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { - public modifiers: ISyntaxToken[]; - public constructorKeyword: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public semicolonToken: ISyntaxToken; - public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], constructorKeyword: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.constructorKeyword = constructorKeyword, - this.callSignature = callSignature, - this.block = block, - !isShared(modifiers) && (modifiers.parent = this), - constructorKeyword.parent = this, - callSignature.parent = this, - block && (block.parent = this); - } - } - export class IndexMemberDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { - public modifiers: ISyntaxToken[]; - public indexSignature: IndexSignatureSyntax; - public semicolonToken: ISyntaxToken; - public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.indexSignature = indexSignature, - !isShared(modifiers) && (modifiers.parent = this), - indexSignature.parent = this; - } - } - export class GetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { - public modifiers: ISyntaxToken[]; - public getKeyword: ISyntaxToken; - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public _memberDeclarationBrand: any; public _propertyAssignmentBrand: any; public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) { - super(data); - this.modifiers = modifiers, - this.propertyName = propertyName, - this.callSignature = callSignature, - this.block = block, - !isShared(modifiers) && (modifiers.parent = this), - propertyName.parent = this, - callSignature.parent = this, - block.parent = this; - } - } - export class SetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { - public modifiers: ISyntaxToken[]; - public setKeyword: ISyntaxToken; - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public _memberDeclarationBrand: any; public _propertyAssignmentBrand: any; public _classElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], setKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) { - super(data); - this.modifiers = modifiers, - this.propertyName = propertyName, - this.callSignature = callSignature, - this.block = block, - !isShared(modifiers) && (modifiers.parent = this), - propertyName.parent = this, - callSignature.parent = this, - block.parent = this; - } - } - export class PropertySignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public propertyName: ISyntaxToken; - public questionToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public _typeMemberBrand: any; - constructor(data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax) { - super(data); - this.propertyName = propertyName, - this.questionToken = questionToken, - this.typeAnnotation = typeAnnotation, - propertyName.parent = this, - questionToken && (questionToken.parent = this), - typeAnnotation && (typeAnnotation.parent = this); - } - } - export class CallSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public typeParameterList: TypeParameterListSyntax; - public parameterList: ParameterListSyntax; - public typeAnnotation: TypeAnnotationSyntax; - public _typeMemberBrand: any; - constructor(data: number, typeParameterList: TypeParameterListSyntax, parameterList: ParameterListSyntax, typeAnnotation: TypeAnnotationSyntax) { - super(data); - this.typeParameterList = typeParameterList, - this.parameterList = parameterList, - this.typeAnnotation = typeAnnotation, - typeParameterList && (typeParameterList.parent = this), - parameterList.parent = this, - typeAnnotation && (typeAnnotation.parent = this); - } - } - export class ConstructSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public newKeyword: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public _typeMemberBrand: any; - constructor(data: number, newKeyword: ISyntaxToken, callSignature: CallSignatureSyntax) { - super(data); - this.callSignature = callSignature, - callSignature.parent = this; - } - } - export class IndexSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public openBracketToken: ISyntaxToken; - public parameters: ParameterSyntax[]; - public closeBracketToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public _typeMemberBrand: any; - constructor(data: number, openBracketToken: ISyntaxToken, parameters: ParameterSyntax[], closeBracketToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax) { - super(data); - this.openBracketToken = openBracketToken, - this.parameters = parameters, - this.closeBracketToken = closeBracketToken, - this.typeAnnotation = typeAnnotation, - openBracketToken.parent = this, - !isShared(parameters) && (parameters.parent = this), - closeBracketToken.parent = this, - typeAnnotation && (typeAnnotation.parent = this); - } - } - export class MethodSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { - public propertyName: ISyntaxToken; - public questionToken: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public _typeMemberBrand: any; - constructor(data: number, propertyName: ISyntaxToken, questionToken: ISyntaxToken, callSignature: CallSignatureSyntax) { - super(data); - this.propertyName = propertyName, - this.questionToken = questionToken, - this.callSignature = callSignature, - propertyName.parent = this, - questionToken && (questionToken.parent = this), - callSignature.parent = this; - } - } - export class BlockSyntax extends SyntaxNode implements IStatementSyntax { - public openBraceToken: ISyntaxToken; - public statements: IStatementSyntax[]; - public closeBraceToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, openBraceToken: ISyntaxToken, statements: IStatementSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.openBraceToken = openBraceToken, - this.statements = statements, - openBraceToken.parent = this, - !isShared(statements) && (statements.parent = this); - } - } - export class IfStatementSyntax extends SyntaxNode implements IStatementSyntax { - public ifKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public elseClause: ElseClauseSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, ifKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax, elseClause: ElseClauseSyntax) { - super(data); - this.condition = condition, - this.statement = statement, - this.elseClause = elseClause, - condition.parent = this, - statement.parent = this, - elseClause && (elseClause.parent = this); - } - } - export class VariableStatementSyntax extends SyntaxNode implements IStatementSyntax { - public modifiers: ISyntaxToken[]; - public variableDeclaration: VariableDeclarationSyntax; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, modifiers: ISyntaxToken[], variableDeclaration: VariableDeclarationSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.modifiers = modifiers, - this.variableDeclaration = variableDeclaration, - !isShared(modifiers) && (modifiers.parent = this), - variableDeclaration.parent = this; - } - } - export class ExpressionStatementSyntax extends SyntaxNode implements IStatementSyntax { - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class ReturnStatementSyntax extends SyntaxNode implements IStatementSyntax { - public returnKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, returnKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.returnKeyword = returnKeyword, - this.expression = expression, - returnKeyword.parent = this, - expression && (expression.parent = this); - } - } - export class SwitchStatementSyntax extends SyntaxNode implements IStatementSyntax { - public switchKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public openBraceToken: ISyntaxToken; - public switchClauses: ISwitchClauseSyntax[]; - public closeBraceToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, switchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, openBraceToken: ISyntaxToken, switchClauses: ISwitchClauseSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.expression = expression, - this.switchClauses = switchClauses, - expression.parent = this, - !isShared(switchClauses) && (switchClauses.parent = this); - } - } - export class BreakStatementSyntax extends SyntaxNode implements IStatementSyntax { - public breakKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, breakKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { - super(data); - this.breakKeyword = breakKeyword, - this.identifier = identifier, - breakKeyword.parent = this, - identifier && (identifier.parent = this); - } - } - export class ContinueStatementSyntax extends SyntaxNode implements IStatementSyntax { - public continueKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, continueKeyword: ISyntaxToken, identifier: ISyntaxToken, semicolonToken: ISyntaxToken) { - super(data); - this.continueKeyword = continueKeyword, - this.identifier = identifier, - continueKeyword.parent = this, - identifier && (identifier.parent = this); - } - } - export class ForStatementSyntax extends SyntaxNode implements IStatementSyntax { - public forKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public variableDeclaration: VariableDeclarationSyntax; - public initializer: IExpressionSyntax; - public firstSemicolonToken: ISyntaxToken; - public condition: IExpressionSyntax; - public secondSemicolonToken: ISyntaxToken; - public incrementor: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, initializer: IExpressionSyntax, firstSemicolonToken: ISyntaxToken, condition: IExpressionSyntax, secondSemicolonToken: ISyntaxToken, incrementor: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.variableDeclaration = variableDeclaration, - this.initializer = initializer, - this.condition = condition, - this.incrementor = incrementor, - this.statement = statement, - variableDeclaration && (variableDeclaration.parent = this), - initializer && (initializer.parent = this), - condition && (condition.parent = this), - incrementor && (incrementor.parent = this), - statement.parent = this; - } - } - export class ForInStatementSyntax extends SyntaxNode implements IStatementSyntax { - public forKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public variableDeclaration: VariableDeclarationSyntax; - public left: IExpressionSyntax; - public inKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, forKeyword: ISyntaxToken, openParenToken: ISyntaxToken, variableDeclaration: VariableDeclarationSyntax, left: IExpressionSyntax, inKeyword: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.variableDeclaration = variableDeclaration, - this.left = left, - this.expression = expression, - this.statement = statement, - variableDeclaration && (variableDeclaration.parent = this), - left && (left.parent = this), - expression.parent = this, - statement.parent = this; - } - } - export class EmptyStatementSyntax extends SyntaxNode implements IStatementSyntax { - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, semicolonToken: ISyntaxToken) { - super(data); - this.semicolonToken = semicolonToken, - semicolonToken.parent = this; - } - } - export class ThrowStatementSyntax extends SyntaxNode implements IStatementSyntax { - public throwKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, throwKeyword: ISyntaxToken, expression: IExpressionSyntax, semicolonToken: ISyntaxToken) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class WhileStatementSyntax extends SyntaxNode implements IStatementSyntax { - public whileKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.condition = condition, - this.statement = statement, - condition.parent = this, - statement.parent = this; - } - } - export class TryStatementSyntax extends SyntaxNode implements IStatementSyntax { - public tryKeyword: ISyntaxToken; - public block: BlockSyntax; - public catchClause: CatchClauseSyntax; - public finallyClause: FinallyClauseSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, tryKeyword: ISyntaxToken, block: BlockSyntax, catchClause: CatchClauseSyntax, finallyClause: FinallyClauseSyntax) { - super(data); - this.block = block, - this.catchClause = catchClause, - this.finallyClause = finallyClause, - block.parent = this, - catchClause && (catchClause.parent = this), - finallyClause && (finallyClause.parent = this); - } - } - export class LabeledStatementSyntax extends SyntaxNode implements IStatementSyntax { - public identifier: ISyntaxToken; - public colonToken: ISyntaxToken; - public statement: IStatementSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, identifier: ISyntaxToken, colonToken: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.identifier = identifier, - this.statement = statement, - identifier.parent = this, - statement.parent = this; - } - } - export class DoStatementSyntax extends SyntaxNode implements IStatementSyntax { - public doKeyword: ISyntaxToken; - public statement: IStatementSyntax; - public whileKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, doKeyword: ISyntaxToken, statement: IStatementSyntax, whileKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, semicolonToken: ISyntaxToken) { - super(data); - this.statement = statement, - this.condition = condition, - statement.parent = this, - condition.parent = this; - } - } - export class DebuggerStatementSyntax extends SyntaxNode implements IStatementSyntax { - public debuggerKeyword: ISyntaxToken; - public semicolonToken: ISyntaxToken; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, debuggerKeyword: ISyntaxToken, semicolonToken: ISyntaxToken) { - super(data); - this.debuggerKeyword = debuggerKeyword, - debuggerKeyword.parent = this; - } - } - export class WithStatementSyntax extends SyntaxNode implements IStatementSyntax { - public withKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public condition: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public statement: IStatementSyntax; - public _statementBrand: any; public _moduleElementBrand: any; - constructor(data: number, withKeyword: ISyntaxToken, openParenToken: ISyntaxToken, condition: IExpressionSyntax, closeParenToken: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.condition = condition, - this.statement = statement, - condition.parent = this, - statement.parent = this; - } - } - export class PrefixUnaryExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public operatorToken: ISyntaxToken; - public operand: IUnaryExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, operatorToken: ISyntaxToken, operand: IUnaryExpressionSyntax) { - super(data); - this.operatorToken = operatorToken, - this.operand = operand, - operatorToken.parent = this, - operand.parent = this; - } - } - export class DeleteExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public deleteKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, deleteKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class TypeOfExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public typeOfKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, typeOfKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class VoidExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public voidKeyword: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, voidKeyword: ISyntaxToken, expression: IUnaryExpressionSyntax) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class ConditionalExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - public condition: IExpressionSyntax; - public questionToken: ISyntaxToken; - public whenTrue: IExpressionSyntax; - public colonToken: ISyntaxToken; - public whenFalse: IExpressionSyntax; - public _expressionBrand: any; - constructor(data: number, condition: IExpressionSyntax, questionToken: ISyntaxToken, whenTrue: IExpressionSyntax, colonToken: ISyntaxToken, whenFalse: IExpressionSyntax) { - super(data); - this.condition = condition, - this.whenTrue = whenTrue, - this.whenFalse = whenFalse, - condition.parent = this, - whenTrue.parent = this, - whenFalse.parent = this; - } - } - export class BinaryExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - public left: IExpressionSyntax; - public operatorToken: ISyntaxToken; - public right: IExpressionSyntax; - public _expressionBrand: any; - constructor(data: number, left: IExpressionSyntax, operatorToken: ISyntaxToken, right: IExpressionSyntax) { - super(data); - this.left = left, - this.operatorToken = operatorToken, - this.right = right, - left.parent = this, - operatorToken.parent = this, - right.parent = this; - } - } - export class PostfixUnaryExpressionSyntax extends SyntaxNode implements IPostfixExpressionSyntax { - public operand: ILeftHandSideExpressionSyntax; - public operatorToken: ISyntaxToken; - public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, operand: ILeftHandSideExpressionSyntax, operatorToken: ISyntaxToken) { - super(data); - this.operand = operand, - this.operatorToken = operatorToken, - operand.parent = this, - operatorToken.parent = this; - } - } - export class MemberAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { - public expression: ILeftHandSideExpressionSyntax; - public dotToken: ISyntaxToken; - public name: ISyntaxToken; - public _memberExpressionBrand: any; public _callExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, expression: ILeftHandSideExpressionSyntax, dotToken: ISyntaxToken, name: ISyntaxToken) { - super(data); - this.expression = expression, - this.name = name, - expression.parent = this, - name.parent = this; - } - } - export class InvocationExpressionSyntax extends SyntaxNode implements ICallExpressionSyntax { - public expression: ILeftHandSideExpressionSyntax; - public argumentList: ArgumentListSyntax; - public _callExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, expression: ILeftHandSideExpressionSyntax, argumentList: ArgumentListSyntax) { - super(data); - this.expression = expression, - this.argumentList = argumentList, - expression.parent = this, - argumentList.parent = this; - } - } - export class ArrayLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openBracketToken: ISyntaxToken; - public expressions: IExpressionSyntax[]; - public closeBracketToken: ISyntaxToken; - public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, openBracketToken: ISyntaxToken, expressions: IExpressionSyntax[], closeBracketToken: ISyntaxToken) { - super(data); - this.expressions = expressions, - !isShared(expressions) && (expressions.parent = this); - } - } - export class ObjectLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openBraceToken: ISyntaxToken; - public propertyAssignments: IPropertyAssignmentSyntax[]; - public closeBraceToken: ISyntaxToken; - public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, openBraceToken: ISyntaxToken, propertyAssignments: IPropertyAssignmentSyntax[], closeBraceToken: ISyntaxToken) { - super(data); - this.propertyAssignments = propertyAssignments, - !isShared(propertyAssignments) && (propertyAssignments.parent = this); - } - } - export class ObjectCreationExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public newKeyword: ISyntaxToken; - public expression: IMemberExpressionSyntax; - public argumentList: ArgumentListSyntax; - public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, newKeyword: ISyntaxToken, expression: IMemberExpressionSyntax, argumentList: ArgumentListSyntax) { - super(data); - this.expression = expression, - this.argumentList = argumentList, - expression.parent = this, - argumentList && (argumentList.parent = this); - } - } - export class ParenthesizedExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public openParenToken: ISyntaxToken; - public expression: IExpressionSyntax; - public closeParenToken: ISyntaxToken; - public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, openParenToken: ISyntaxToken, expression: IExpressionSyntax, closeParenToken: ISyntaxToken) { - super(data); - this.expression = expression, - expression.parent = this; - } - } - export class ParenthesizedArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public callSignature: CallSignatureSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public block: BlockSyntax; - public expression: IExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, callSignature: CallSignatureSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax) { - super(data); - this.callSignature = callSignature, - this.block = block, - this.expression = expression, - callSignature.parent = this, - block && (block.parent = this), - expression && (expression.parent = this); - } - } - export class SimpleArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public parameter: ParameterSyntax; - public equalsGreaterThanToken: ISyntaxToken; - public block: BlockSyntax; - public expression: IExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, parameter: ParameterSyntax, equalsGreaterThanToken: ISyntaxToken, block: BlockSyntax, expression: IExpressionSyntax) { - super(data); - this.parameter = parameter, - this.block = block, - this.expression = expression, - parameter.parent = this, - block && (block.parent = this), - expression && (expression.parent = this); - } - } - export class CastExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { - public lessThanToken: ISyntaxToken; - public type: ITypeSyntax; - public greaterThanToken: ISyntaxToken; - public expression: IUnaryExpressionSyntax; - public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, lessThanToken: ISyntaxToken, type: ITypeSyntax, greaterThanToken: ISyntaxToken, expression: IUnaryExpressionSyntax) { - super(data); - this.type = type, - this.expression = expression, - type.parent = this, - expression.parent = this; - } - } - export class ElementAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { - public expression: ILeftHandSideExpressionSyntax; - public openBracketToken: ISyntaxToken; - public argumentExpression: IExpressionSyntax; - public closeBracketToken: ISyntaxToken; - public _memberExpressionBrand: any; public _callExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, expression: ILeftHandSideExpressionSyntax, openBracketToken: ISyntaxToken, argumentExpression: IExpressionSyntax, closeBracketToken: ISyntaxToken) { - super(data); - this.expression = expression, - this.argumentExpression = argumentExpression, - expression.parent = this, - argumentExpression.parent = this; - } - } - export class FunctionExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { - public functionKeyword: ISyntaxToken; - public identifier: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public _primaryExpressionBrand: any; public _memberExpressionBrand: any; public _leftHandSideExpressionBrand: any; public _postfixExpressionBrand: any; public _unaryExpressionBrand: any; public _expressionBrand: any; - constructor(data: number, functionKeyword: ISyntaxToken, identifier: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) { - super(data); - this.identifier = identifier, - this.callSignature = callSignature, - this.block = block, - identifier && (identifier.parent = this), - callSignature.parent = this, - block.parent = this; - } - } - export class OmittedExpressionSyntax extends SyntaxNode implements IExpressionSyntax { - public _expressionBrand: any; - constructor(data: number) { - super(data); - } - } - export class VariableDeclarationSyntax extends SyntaxNode { - public varKeyword: ISyntaxToken; - public variableDeclarators: VariableDeclaratorSyntax[]; - constructor(data: number, varKeyword: ISyntaxToken, variableDeclarators: VariableDeclaratorSyntax[]) { - super(data); - this.varKeyword = varKeyword, - this.variableDeclarators = variableDeclarators, - varKeyword.parent = this, - !isShared(variableDeclarators) && (variableDeclarators.parent = this); - } - } - export class VariableDeclaratorSyntax extends SyntaxNode { - public propertyName: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(data: number, propertyName: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { - super(data); - this.propertyName = propertyName, - this.typeAnnotation = typeAnnotation, - this.equalsValueClause = equalsValueClause, - propertyName.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - equalsValueClause && (equalsValueClause.parent = this); - } - } - export class ArgumentListSyntax extends SyntaxNode { - public typeArgumentList: TypeArgumentListSyntax; - public openParenToken: ISyntaxToken; - public arguments: IExpressionSyntax[]; - public closeParenToken: ISyntaxToken; - constructor(data: number, typeArgumentList: TypeArgumentListSyntax, openParenToken: ISyntaxToken, _arguments: IExpressionSyntax[], closeParenToken: ISyntaxToken) { - super(data); - this.typeArgumentList = typeArgumentList, - this.arguments = _arguments, - typeArgumentList && (typeArgumentList.parent = this), - !isShared(_arguments) && (_arguments.parent = this); - } - } - export class ParameterListSyntax extends SyntaxNode { - public openParenToken: ISyntaxToken; - public parameters: ParameterSyntax[]; - public closeParenToken: ISyntaxToken; - constructor(data: number, openParenToken: ISyntaxToken, parameters: ParameterSyntax[], closeParenToken: ISyntaxToken) { - super(data); - this.parameters = parameters, - !isShared(parameters) && (parameters.parent = this); - } - } - export class TypeArgumentListSyntax extends SyntaxNode { - public lessThanToken: ISyntaxToken; - public typeArguments: ITypeSyntax[]; - public greaterThanToken: ISyntaxToken; - constructor(data: number, lessThanToken: ISyntaxToken, typeArguments: ITypeSyntax[], greaterThanToken: ISyntaxToken) { - super(data); - this.lessThanToken = lessThanToken, - this.typeArguments = typeArguments, - lessThanToken.parent = this, - !isShared(typeArguments) && (typeArguments.parent = this); - } - } - export class TypeParameterListSyntax extends SyntaxNode { - public lessThanToken: ISyntaxToken; - public typeParameters: TypeParameterSyntax[]; - public greaterThanToken: ISyntaxToken; - constructor(data: number, lessThanToken: ISyntaxToken, typeParameters: TypeParameterSyntax[], greaterThanToken: ISyntaxToken) { - super(data); - this.lessThanToken = lessThanToken, - this.typeParameters = typeParameters, - lessThanToken.parent = this, - !isShared(typeParameters) && (typeParameters.parent = this); - } - } - export class HeritageClauseSyntax extends SyntaxNode { - public extendsOrImplementsKeyword: ISyntaxToken; - public typeNames: INameSyntax[]; - constructor(data: number, extendsOrImplementsKeyword: ISyntaxToken, typeNames: INameSyntax[]) { - super(data); - this.extendsOrImplementsKeyword = extendsOrImplementsKeyword, - this.typeNames = typeNames, - extendsOrImplementsKeyword.parent = this, - !isShared(typeNames) && (typeNames.parent = this); - } - } - export class EqualsValueClauseSyntax extends SyntaxNode { - public equalsToken: ISyntaxToken; - public value: IExpressionSyntax; - constructor(data: number, equalsToken: ISyntaxToken, value: IExpressionSyntax) { - super(data); - this.value = value, - value.parent = this; - } - } - export class CaseSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { - public caseKeyword: ISyntaxToken; - public expression: IExpressionSyntax; - public colonToken: ISyntaxToken; - public statements: IStatementSyntax[]; - public _switchClauseBrand: any; - constructor(data: number, caseKeyword: ISyntaxToken, expression: IExpressionSyntax, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { - super(data); - this.expression = expression, - this.statements = statements, - expression.parent = this, - !isShared(statements) && (statements.parent = this); - } - } - export class DefaultSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { - public defaultKeyword: ISyntaxToken; - public colonToken: ISyntaxToken; - public statements: IStatementSyntax[]; - public _switchClauseBrand: any; - constructor(data: number, defaultKeyword: ISyntaxToken, colonToken: ISyntaxToken, statements: IStatementSyntax[]) { - super(data); - this.statements = statements, - !isShared(statements) && (statements.parent = this); - } - } - export class ElseClauseSyntax extends SyntaxNode { - public elseKeyword: ISyntaxToken; - public statement: IStatementSyntax; - constructor(data: number, elseKeyword: ISyntaxToken, statement: IStatementSyntax) { - super(data); - this.statement = statement, - statement.parent = this; - } - } - export class CatchClauseSyntax extends SyntaxNode { - public catchKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public identifier: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public closeParenToken: ISyntaxToken; - public block: BlockSyntax; - constructor(data: number, catchKeyword: ISyntaxToken, openParenToken: ISyntaxToken, identifier: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, closeParenToken: ISyntaxToken, block: BlockSyntax) { - super(data); - this.identifier = identifier, - this.typeAnnotation = typeAnnotation, - this.block = block, - identifier.parent = this, - typeAnnotation && (typeAnnotation.parent = this), - block.parent = this; - } - } - export class FinallyClauseSyntax extends SyntaxNode { - public finallyKeyword: ISyntaxToken; - public block: BlockSyntax; - constructor(data: number, finallyKeyword: ISyntaxToken, block: BlockSyntax) { - super(data); - this.block = block, - block.parent = this; - } - } - export class TypeParameterSyntax extends SyntaxNode { - public identifier: ISyntaxToken; - public constraint: ConstraintSyntax; - constructor(data: number, identifier: ISyntaxToken, constraint: ConstraintSyntax) { - super(data); - this.identifier = identifier, - this.constraint = constraint, - identifier.parent = this, - constraint && (constraint.parent = this); - } - } - export class ConstraintSyntax extends SyntaxNode { - public extendsKeyword: ISyntaxToken; - public typeOrExpression: ISyntaxNodeOrToken; - constructor(data: number, extendsKeyword: ISyntaxToken, typeOrExpression: ISyntaxNodeOrToken) { - super(data); - this.typeOrExpression = typeOrExpression, - typeOrExpression.parent = this; - } - } - export class SimplePropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { - public propertyName: ISyntaxToken; - public colonToken: ISyntaxToken; - public expression: IExpressionSyntax; - public _propertyAssignmentBrand: any; - constructor(data: number, propertyName: ISyntaxToken, colonToken: ISyntaxToken, expression: IExpressionSyntax) { - super(data); - this.propertyName = propertyName, - this.expression = expression, - propertyName.parent = this, - expression.parent = this; - } - } - export class FunctionPropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { - public propertyName: ISyntaxToken; - public callSignature: CallSignatureSyntax; - public block: BlockSyntax; - public _propertyAssignmentBrand: any; - constructor(data: number, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax) { - super(data); - this.propertyName = propertyName, - this.callSignature = callSignature, - this.block = block, - propertyName.parent = this, - callSignature.parent = this, - block.parent = this; - } - } - export class ParameterSyntax extends SyntaxNode { - public dotDotDotToken: ISyntaxToken; - public modifiers: ISyntaxToken[]; - public identifier: ISyntaxToken; - public questionToken: ISyntaxToken; - public typeAnnotation: TypeAnnotationSyntax; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(data: number, dotDotDotToken: ISyntaxToken, modifiers: ISyntaxToken[], identifier: ISyntaxToken, questionToken: ISyntaxToken, typeAnnotation: TypeAnnotationSyntax, equalsValueClause: EqualsValueClauseSyntax) { - super(data); - this.dotDotDotToken = dotDotDotToken, - this.modifiers = modifiers, - this.identifier = identifier, - this.questionToken = questionToken, - this.typeAnnotation = typeAnnotation, - this.equalsValueClause = equalsValueClause, - dotDotDotToken && (dotDotDotToken.parent = this), - !isShared(modifiers) && (modifiers.parent = this), - identifier.parent = this, - questionToken && (questionToken.parent = this), - typeAnnotation && (typeAnnotation.parent = this), - equalsValueClause && (equalsValueClause.parent = this); - } - } - export class EnumElementSyntax extends SyntaxNode { - public propertyName: ISyntaxToken; - public equalsValueClause: EqualsValueClauseSyntax; - constructor(data: number, propertyName: ISyntaxToken, equalsValueClause: EqualsValueClauseSyntax) { - super(data); - this.propertyName = propertyName, - this.equalsValueClause = equalsValueClause, - propertyName.parent = this, - equalsValueClause && (equalsValueClause.parent = this); - } - } - export class TypeAnnotationSyntax extends SyntaxNode { - public colonToken: ISyntaxToken; - public type: ITypeSyntax; - constructor(data: number, colonToken: ISyntaxToken, type: ITypeSyntax) { - super(data); - this.type = type, - type.parent = this; - } - } - export class ExternalModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { - public requireKeyword: ISyntaxToken; - public openParenToken: ISyntaxToken; - public stringLiteral: ISyntaxToken; - public closeParenToken: ISyntaxToken; - public _moduleReferenceBrand: any; - constructor(data: number, requireKeyword: ISyntaxToken, openParenToken: ISyntaxToken, stringLiteral: ISyntaxToken, closeParenToken: ISyntaxToken) { - super(data); - this.stringLiteral = stringLiteral, - stringLiteral.parent = this; - } - } - export class ModuleNameModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { - public moduleName: INameSyntax; - public _moduleReferenceBrand: any; - constructor(data: number, moduleName: INameSyntax) { - super(data); - this.moduleName = moduleName, - moduleName.parent = this; - } - } - - (SourceUnitSyntax).prototype.__kind = SyntaxKind.SourceUnit, (QualifiedNameSyntax).prototype.__kind = SyntaxKind.QualifiedName, (ObjectTypeSyntax).prototype.__kind = SyntaxKind.ObjectType, (FunctionTypeSyntax).prototype.__kind = SyntaxKind.FunctionType, (ArrayTypeSyntax).prototype.__kind = SyntaxKind.ArrayType, (ConstructorTypeSyntax).prototype.__kind = SyntaxKind.ConstructorType, (GenericTypeSyntax).prototype.__kind = SyntaxKind.GenericType, (TypeQuerySyntax).prototype.__kind = SyntaxKind.TypeQuery, (TupleTypeSyntax).prototype.__kind = SyntaxKind.TupleType, (UnionTypeSyntax).prototype.__kind = SyntaxKind.UnionType, (ParenthesizedTypeSyntax).prototype.__kind = SyntaxKind.ParenthesizedType, (InterfaceDeclarationSyntax).prototype.__kind = SyntaxKind.InterfaceDeclaration, (FunctionDeclarationSyntax).prototype.__kind = SyntaxKind.FunctionDeclaration, (ModuleDeclarationSyntax).prototype.__kind = SyntaxKind.ModuleDeclaration, (ClassDeclarationSyntax).prototype.__kind = SyntaxKind.ClassDeclaration, (EnumDeclarationSyntax).prototype.__kind = SyntaxKind.EnumDeclaration, (ImportDeclarationSyntax).prototype.__kind = SyntaxKind.ImportDeclaration, (ExportAssignmentSyntax).prototype.__kind = SyntaxKind.ExportAssignment, (MemberFunctionDeclarationSyntax).prototype.__kind = SyntaxKind.MemberFunctionDeclaration, (MemberVariableDeclarationSyntax).prototype.__kind = SyntaxKind.MemberVariableDeclaration, (ConstructorDeclarationSyntax).prototype.__kind = SyntaxKind.ConstructorDeclaration, (IndexMemberDeclarationSyntax).prototype.__kind = SyntaxKind.IndexMemberDeclaration, (GetAccessorSyntax).prototype.__kind = SyntaxKind.GetAccessor, (SetAccessorSyntax).prototype.__kind = SyntaxKind.SetAccessor, (PropertySignatureSyntax).prototype.__kind = SyntaxKind.PropertySignature, (CallSignatureSyntax).prototype.__kind = SyntaxKind.CallSignature, (ConstructSignatureSyntax).prototype.__kind = SyntaxKind.ConstructSignature, (IndexSignatureSyntax).prototype.__kind = SyntaxKind.IndexSignature, (MethodSignatureSyntax).prototype.__kind = SyntaxKind.MethodSignature, (BlockSyntax).prototype.__kind = SyntaxKind.Block, (IfStatementSyntax).prototype.__kind = SyntaxKind.IfStatement, (VariableStatementSyntax).prototype.__kind = SyntaxKind.VariableStatement, (ExpressionStatementSyntax).prototype.__kind = SyntaxKind.ExpressionStatement, (ReturnStatementSyntax).prototype.__kind = SyntaxKind.ReturnStatement, (SwitchStatementSyntax).prototype.__kind = SyntaxKind.SwitchStatement, (BreakStatementSyntax).prototype.__kind = SyntaxKind.BreakStatement, (ContinueStatementSyntax).prototype.__kind = SyntaxKind.ContinueStatement, (ForStatementSyntax).prototype.__kind = SyntaxKind.ForStatement, (ForInStatementSyntax).prototype.__kind = SyntaxKind.ForInStatement, (EmptyStatementSyntax).prototype.__kind = SyntaxKind.EmptyStatement, (ThrowStatementSyntax).prototype.__kind = SyntaxKind.ThrowStatement, (WhileStatementSyntax).prototype.__kind = SyntaxKind.WhileStatement, (TryStatementSyntax).prototype.__kind = SyntaxKind.TryStatement, (LabeledStatementSyntax).prototype.__kind = SyntaxKind.LabeledStatement, (DoStatementSyntax).prototype.__kind = SyntaxKind.DoStatement, (DebuggerStatementSyntax).prototype.__kind = SyntaxKind.DebuggerStatement, (WithStatementSyntax).prototype.__kind = SyntaxKind.WithStatement, (PrefixUnaryExpressionSyntax).prototype.__kind = SyntaxKind.PrefixUnaryExpression, (DeleteExpressionSyntax).prototype.__kind = SyntaxKind.DeleteExpression, (TypeOfExpressionSyntax).prototype.__kind = SyntaxKind.TypeOfExpression, (VoidExpressionSyntax).prototype.__kind = SyntaxKind.VoidExpression, (ConditionalExpressionSyntax).prototype.__kind = SyntaxKind.ConditionalExpression, (BinaryExpressionSyntax).prototype.__kind = SyntaxKind.BinaryExpression, (PostfixUnaryExpressionSyntax).prototype.__kind = SyntaxKind.PostfixUnaryExpression, (MemberAccessExpressionSyntax).prototype.__kind = SyntaxKind.MemberAccessExpression, (InvocationExpressionSyntax).prototype.__kind = SyntaxKind.InvocationExpression, (ArrayLiteralExpressionSyntax).prototype.__kind = SyntaxKind.ArrayLiteralExpression, (ObjectLiteralExpressionSyntax).prototype.__kind = SyntaxKind.ObjectLiteralExpression, (ObjectCreationExpressionSyntax).prototype.__kind = SyntaxKind.ObjectCreationExpression, (ParenthesizedExpressionSyntax).prototype.__kind = SyntaxKind.ParenthesizedExpression, (ParenthesizedArrowFunctionExpressionSyntax).prototype.__kind = SyntaxKind.ParenthesizedArrowFunctionExpression, (SimpleArrowFunctionExpressionSyntax).prototype.__kind = SyntaxKind.SimpleArrowFunctionExpression, (CastExpressionSyntax).prototype.__kind = SyntaxKind.CastExpression, (ElementAccessExpressionSyntax).prototype.__kind = SyntaxKind.ElementAccessExpression, (FunctionExpressionSyntax).prototype.__kind = SyntaxKind.FunctionExpression, (OmittedExpressionSyntax).prototype.__kind = SyntaxKind.OmittedExpression, (VariableDeclarationSyntax).prototype.__kind = SyntaxKind.VariableDeclaration, (VariableDeclaratorSyntax).prototype.__kind = SyntaxKind.VariableDeclarator, (ArgumentListSyntax).prototype.__kind = SyntaxKind.ArgumentList, (ParameterListSyntax).prototype.__kind = SyntaxKind.ParameterList, (TypeArgumentListSyntax).prototype.__kind = SyntaxKind.TypeArgumentList, (TypeParameterListSyntax).prototype.__kind = SyntaxKind.TypeParameterList, (HeritageClauseSyntax).prototype.__kind = SyntaxKind.HeritageClause, (EqualsValueClauseSyntax).prototype.__kind = SyntaxKind.EqualsValueClause, (CaseSwitchClauseSyntax).prototype.__kind = SyntaxKind.CaseSwitchClause, (DefaultSwitchClauseSyntax).prototype.__kind = SyntaxKind.DefaultSwitchClause, (ElseClauseSyntax).prototype.__kind = SyntaxKind.ElseClause, (CatchClauseSyntax).prototype.__kind = SyntaxKind.CatchClause, (FinallyClauseSyntax).prototype.__kind = SyntaxKind.FinallyClause, (TypeParameterSyntax).prototype.__kind = SyntaxKind.TypeParameter, (ConstraintSyntax).prototype.__kind = SyntaxKind.Constraint, (SimplePropertyAssignmentSyntax).prototype.__kind = SyntaxKind.SimplePropertyAssignment, (FunctionPropertyAssignmentSyntax).prototype.__kind = SyntaxKind.FunctionPropertyAssignment, (ParameterSyntax).prototype.__kind = SyntaxKind.Parameter, (EnumElementSyntax).prototype.__kind = SyntaxKind.EnumElement, (TypeAnnotationSyntax).prototype.__kind = SyntaxKind.TypeAnnotation, (ExternalModuleReferenceSyntax).prototype.__kind = SyntaxKind.ExternalModuleReference, (ModuleNameModuleReferenceSyntax).prototype.__kind = SyntaxKind.ModuleNameModuleReference; -} \ No newline at end of file diff --git a/src/services/syntax/syntaxNodes.concrete.generated.ts b/src/services/syntax/syntaxNodes.concrete.generated.ts index 0f119267315..ea5ded99908 100644 --- a/src/services/syntax/syntaxNodes.concrete.generated.ts +++ b/src/services/syntax/syntaxNodes.concrete.generated.ts @@ -17,6 +17,26 @@ module TypeScript.Syntax.Concrete { !isShared(moduleElements) && (moduleElements.parent = this), endOfFileToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.SourceUnit; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.moduleElements; + case 1: return this.endOfFileToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitSourceUnit(this); + } } export class QualifiedNameSyntax extends SyntaxNode implements INameSyntax { public left: INameSyntax; @@ -32,6 +52,27 @@ module TypeScript.Syntax.Concrete { dotToken.parent = this, right.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.QualifiedName; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.left; + case 1: return this.dotToken; + case 2: return this.right; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitQualifiedName(this); + } } export class ObjectTypeSyntax extends SyntaxNode implements ITypeSyntax { public openBraceToken: ISyntaxToken; @@ -47,6 +88,27 @@ module TypeScript.Syntax.Concrete { !isShared(typeMembers) && (typeMembers.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ObjectType; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBraceToken; + case 1: return this.typeMembers; + case 2: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitObjectType(this); + } } export class FunctionTypeSyntax extends SyntaxNode implements ITypeSyntax { public typeParameterList: TypeParameterListSyntax; @@ -65,6 +127,28 @@ module TypeScript.Syntax.Concrete { equalsGreaterThanToken.parent = this, type.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.FunctionType; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.typeParameterList; + case 1: return this.parameterList; + case 2: return this.equalsGreaterThanToken; + case 3: return this.type; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitFunctionType(this); + } } export class ArrayTypeSyntax extends SyntaxNode implements ITypeSyntax { public type: ITypeSyntax; @@ -80,6 +164,27 @@ module TypeScript.Syntax.Concrete { openBracketToken.parent = this, closeBracketToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ArrayType; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.type; + case 1: return this.openBracketToken; + case 2: return this.closeBracketToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitArrayType(this); + } } export class ConstructorTypeSyntax extends SyntaxNode implements ITypeSyntax { public newKeyword: ISyntaxToken; @@ -101,6 +206,29 @@ module TypeScript.Syntax.Concrete { equalsGreaterThanToken.parent = this, type.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ConstructorType; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.newKeyword; + case 1: return this.typeParameterList; + case 2: return this.parameterList; + case 3: return this.equalsGreaterThanToken; + case 4: return this.type; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitConstructorType(this); + } } export class GenericTypeSyntax extends SyntaxNode implements ITypeSyntax { public name: INameSyntax; @@ -113,6 +241,26 @@ module TypeScript.Syntax.Concrete { name.parent = this, typeArgumentList.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.GenericType; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.name; + case 1: return this.typeArgumentList; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitGenericType(this); + } } export class TypeQuerySyntax extends SyntaxNode implements ITypeSyntax { public typeOfKeyword: ISyntaxToken; @@ -125,6 +273,26 @@ module TypeScript.Syntax.Concrete { typeOfKeyword.parent = this, name.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TypeQuery; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.typeOfKeyword; + case 1: return this.name; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeQuery(this); + } } export class TupleTypeSyntax extends SyntaxNode implements ITypeSyntax { public openBracketToken: ISyntaxToken; @@ -140,6 +308,27 @@ module TypeScript.Syntax.Concrete { !isShared(types) && (types.parent = this), closeBracketToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TupleType; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBracketToken; + case 1: return this.types; + case 2: return this.closeBracketToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTupleType(this); + } } export class UnionTypeSyntax extends SyntaxNode implements ITypeSyntax { public left: ITypeSyntax; @@ -155,6 +344,27 @@ module TypeScript.Syntax.Concrete { barToken.parent = this, right.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.UnionType; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.left; + case 1: return this.barToken; + case 2: return this.right; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitUnionType(this); + } } export class ParenthesizedTypeSyntax extends SyntaxNode implements ITypeSyntax { public openParenToken: ISyntaxToken; @@ -170,6 +380,27 @@ module TypeScript.Syntax.Concrete { type.parent = this, closeParenToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ParenthesizedType; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openParenToken; + case 1: return this.type; + case 2: return this.closeParenToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitParenthesizedType(this); + } } export class InterfaceDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { public modifiers: ISyntaxToken[]; @@ -194,6 +425,30 @@ module TypeScript.Syntax.Concrete { !isShared(heritageClauses) && (heritageClauses.parent = this), body.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.InterfaceDeclaration; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.interfaceKeyword; + case 2: return this.identifier; + case 3: return this.typeParameterList; + case 4: return this.heritageClauses; + case 5: return this.body; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitInterfaceDeclaration(this); + } } export class FunctionDeclarationSyntax extends SyntaxNode implements IStatementSyntax { public modifiers: ISyntaxToken[]; @@ -218,6 +473,30 @@ module TypeScript.Syntax.Concrete { block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.FunctionDeclaration; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.functionKeyword; + case 2: return this.identifier; + case 3: return this.callSignature; + case 4: return this.block; + case 5: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitFunctionDeclaration(this); + } } export class ModuleDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { public modifiers: ISyntaxToken[]; @@ -245,6 +524,31 @@ module TypeScript.Syntax.Concrete { !isShared(moduleElements) && (moduleElements.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ModuleDeclaration; + } + + public childCount(): number { + return 7; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.moduleKeyword; + case 2: return this.name; + case 3: return this.stringLiteral; + case 4: return this.openBraceToken; + case 5: return this.moduleElements; + case 6: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitModuleDeclaration(this); + } } export class ClassDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { public modifiers: ISyntaxToken[]; @@ -275,6 +579,32 @@ module TypeScript.Syntax.Concrete { !isShared(classElements) && (classElements.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ClassDeclaration; + } + + public childCount(): number { + return 8; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.classKeyword; + case 2: return this.identifier; + case 3: return this.typeParameterList; + case 4: return this.heritageClauses; + case 5: return this.openBraceToken; + case 6: return this.classElements; + case 7: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitClassDeclaration(this); + } } export class EnumDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { public modifiers: ISyntaxToken[]; @@ -299,6 +629,30 @@ module TypeScript.Syntax.Concrete { !isShared(enumElements) && (enumElements.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.EnumDeclaration; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.enumKeyword; + case 2: return this.identifier; + case 3: return this.openBraceToken; + case 4: return this.enumElements; + case 5: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitEnumDeclaration(this); + } } export class ImportDeclarationSyntax extends SyntaxNode implements IModuleElementSyntax { public modifiers: ISyntaxToken[]; @@ -323,6 +677,30 @@ module TypeScript.Syntax.Concrete { moduleReference.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ImportDeclaration; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.importKeyword; + case 2: return this.identifier; + case 3: return this.equalsToken; + case 4: return this.moduleReference; + case 5: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitImportDeclaration(this); + } } export class ExportAssignmentSyntax extends SyntaxNode implements IModuleElementSyntax { public exportKeyword: ISyntaxToken; @@ -341,6 +719,28 @@ module TypeScript.Syntax.Concrete { identifier.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ExportAssignment; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.exportKeyword; + case 1: return this.equalsToken; + case 2: return this.identifier; + case 3: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitExportAssignment(this); + } } export class MemberFunctionDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { public modifiers: ISyntaxToken[]; @@ -362,6 +762,29 @@ module TypeScript.Syntax.Concrete { block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.MemberFunctionDeclaration; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.propertyName; + case 2: return this.callSignature; + case 3: return this.block; + case 4: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitMemberFunctionDeclaration(this); + } } export class MemberVariableDeclarationSyntax extends SyntaxNode implements IMemberDeclarationSyntax { public modifiers: ISyntaxToken[]; @@ -377,6 +800,27 @@ module TypeScript.Syntax.Concrete { variableDeclarator.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.MemberVariableDeclaration; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.variableDeclarator; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitMemberVariableDeclaration(this); + } } export class ConstructorDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { public modifiers: ISyntaxToken[]; @@ -398,6 +842,29 @@ module TypeScript.Syntax.Concrete { block && (block.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ConstructorDeclaration; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.constructorKeyword; + case 2: return this.callSignature; + case 3: return this.block; + case 4: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitConstructorDeclaration(this); + } } export class IndexMemberDeclarationSyntax extends SyntaxNode implements IClassElementSyntax { public modifiers: ISyntaxToken[]; @@ -413,6 +880,27 @@ module TypeScript.Syntax.Concrete { indexSignature.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.IndexMemberDeclaration; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.indexSignature; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitIndexMemberDeclaration(this); + } } export class GetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { public modifiers: ISyntaxToken[]; @@ -434,6 +922,29 @@ module TypeScript.Syntax.Concrete { callSignature.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.GetAccessor; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.getKeyword; + case 2: return this.propertyName; + case 3: return this.callSignature; + case 4: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitGetAccessor(this); + } } export class SetAccessorSyntax extends SyntaxNode implements IMemberDeclarationSyntax, IPropertyAssignmentSyntax { public modifiers: ISyntaxToken[]; @@ -455,6 +966,29 @@ module TypeScript.Syntax.Concrete { callSignature.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.SetAccessor; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.setKeyword; + case 2: return this.propertyName; + case 3: return this.callSignature; + case 4: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitSetAccessor(this); + } } export class PropertySignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { public propertyName: ISyntaxToken; @@ -470,6 +1004,27 @@ module TypeScript.Syntax.Concrete { questionToken && (questionToken.parent = this), typeAnnotation && (typeAnnotation.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.PropertySignature; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.questionToken; + case 2: return this.typeAnnotation; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitPropertySignature(this); + } } export class CallSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { public typeParameterList: TypeParameterListSyntax; @@ -485,6 +1040,27 @@ module TypeScript.Syntax.Concrete { parameterList.parent = this, typeAnnotation && (typeAnnotation.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.CallSignature; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.typeParameterList; + case 1: return this.parameterList; + case 2: return this.typeAnnotation; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitCallSignature(this); + } } export class ConstructSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { public newKeyword: ISyntaxToken; @@ -497,6 +1073,26 @@ module TypeScript.Syntax.Concrete { newKeyword.parent = this, callSignature.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ConstructSignature; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.newKeyword; + case 1: return this.callSignature; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitConstructSignature(this); + } } export class IndexSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { public openBracketToken: ISyntaxToken; @@ -515,6 +1111,28 @@ module TypeScript.Syntax.Concrete { closeBracketToken.parent = this, typeAnnotation && (typeAnnotation.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.IndexSignature; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBracketToken; + case 1: return this.parameters; + case 2: return this.closeBracketToken; + case 3: return this.typeAnnotation; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitIndexSignature(this); + } } export class MethodSignatureSyntax extends SyntaxNode implements ITypeMemberSyntax { public propertyName: ISyntaxToken; @@ -530,6 +1148,27 @@ module TypeScript.Syntax.Concrete { questionToken && (questionToken.parent = this), callSignature.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.MethodSignature; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.questionToken; + case 2: return this.callSignature; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitMethodSignature(this); + } } export class BlockSyntax extends SyntaxNode implements IStatementSyntax { public openBraceToken: ISyntaxToken; @@ -545,6 +1184,27 @@ module TypeScript.Syntax.Concrete { !isShared(statements) && (statements.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.Block; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBraceToken; + case 1: return this.statements; + case 2: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitBlock(this); + } } export class IfStatementSyntax extends SyntaxNode implements IStatementSyntax { public ifKeyword: ISyntaxToken; @@ -569,6 +1229,30 @@ module TypeScript.Syntax.Concrete { statement.parent = this, elseClause && (elseClause.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.IfStatement; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.ifKeyword; + case 1: return this.openParenToken; + case 2: return this.condition; + case 3: return this.closeParenToken; + case 4: return this.statement; + case 5: return this.elseClause; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitIfStatement(this); + } } export class VariableStatementSyntax extends SyntaxNode implements IStatementSyntax { public modifiers: ISyntaxToken[]; @@ -584,6 +1268,27 @@ module TypeScript.Syntax.Concrete { variableDeclaration.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.VariableStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.modifiers; + case 1: return this.variableDeclaration; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitVariableStatement(this); + } } export class ExpressionStatementSyntax extends SyntaxNode implements IStatementSyntax { public expression: IExpressionSyntax; @@ -596,6 +1301,26 @@ module TypeScript.Syntax.Concrete { expression.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ExpressionStatement; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.expression; + case 1: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitExpressionStatement(this); + } } export class ReturnStatementSyntax extends SyntaxNode implements IStatementSyntax { public returnKeyword: ISyntaxToken; @@ -611,6 +1336,27 @@ module TypeScript.Syntax.Concrete { expression && (expression.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ReturnStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.returnKeyword; + case 1: return this.expression; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitReturnStatement(this); + } } export class SwitchStatementSyntax extends SyntaxNode implements IStatementSyntax { public switchKeyword: ISyntaxToken; @@ -638,6 +1384,31 @@ module TypeScript.Syntax.Concrete { !isShared(switchClauses) && (switchClauses.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.SwitchStatement; + } + + public childCount(): number { + return 7; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.switchKeyword; + case 1: return this.openParenToken; + case 2: return this.expression; + case 3: return this.closeParenToken; + case 4: return this.openBraceToken; + case 5: return this.switchClauses; + case 6: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitSwitchStatement(this); + } } export class BreakStatementSyntax extends SyntaxNode implements IStatementSyntax { public breakKeyword: ISyntaxToken; @@ -653,6 +1424,27 @@ module TypeScript.Syntax.Concrete { identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.BreakStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.breakKeyword; + case 1: return this.identifier; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitBreakStatement(this); + } } export class ContinueStatementSyntax extends SyntaxNode implements IStatementSyntax { public continueKeyword: ISyntaxToken; @@ -668,6 +1460,27 @@ module TypeScript.Syntax.Concrete { identifier && (identifier.parent = this), semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ContinueStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.continueKeyword; + case 1: return this.identifier; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitContinueStatement(this); + } } export class ForStatementSyntax extends SyntaxNode implements IStatementSyntax { public forKeyword: ISyntaxToken; @@ -704,6 +1517,34 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ForStatement; + } + + public childCount(): number { + return 10; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.forKeyword; + case 1: return this.openParenToken; + case 2: return this.variableDeclaration; + case 3: return this.initializer; + case 4: return this.firstSemicolonToken; + case 5: return this.condition; + case 6: return this.secondSemicolonToken; + case 7: return this.incrementor; + case 8: return this.closeParenToken; + case 9: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitForStatement(this); + } } export class ForInStatementSyntax extends SyntaxNode implements IStatementSyntax { public forKeyword: ISyntaxToken; @@ -734,6 +1575,32 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ForInStatement; + } + + public childCount(): number { + return 8; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.forKeyword; + case 1: return this.openParenToken; + case 2: return this.variableDeclaration; + case 3: return this.left; + case 4: return this.inKeyword; + case 5: return this.expression; + case 6: return this.closeParenToken; + case 7: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitForInStatement(this); + } } export class EmptyStatementSyntax extends SyntaxNode implements IStatementSyntax { public semicolonToken: ISyntaxToken; @@ -743,6 +1610,25 @@ module TypeScript.Syntax.Concrete { this.semicolonToken = semicolonToken, semicolonToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.EmptyStatement; + } + + public childCount(): number { + return 1; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitEmptyStatement(this); + } } export class ThrowStatementSyntax extends SyntaxNode implements IStatementSyntax { public throwKeyword: ISyntaxToken; @@ -758,6 +1644,27 @@ module TypeScript.Syntax.Concrete { expression.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ThrowStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.throwKeyword; + case 1: return this.expression; + case 2: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitThrowStatement(this); + } } export class WhileStatementSyntax extends SyntaxNode implements IStatementSyntax { public whileKeyword: ISyntaxToken; @@ -779,6 +1686,29 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.WhileStatement; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.whileKeyword; + case 1: return this.openParenToken; + case 2: return this.condition; + case 3: return this.closeParenToken; + case 4: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitWhileStatement(this); + } } export class TryStatementSyntax extends SyntaxNode implements IStatementSyntax { public tryKeyword: ISyntaxToken; @@ -797,6 +1727,28 @@ module TypeScript.Syntax.Concrete { catchClause && (catchClause.parent = this), finallyClause && (finallyClause.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.TryStatement; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.tryKeyword; + case 1: return this.block; + case 2: return this.catchClause; + case 3: return this.finallyClause; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTryStatement(this); + } } export class LabeledStatementSyntax extends SyntaxNode implements IStatementSyntax { public identifier: ISyntaxToken; @@ -812,6 +1764,27 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.LabeledStatement; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.identifier; + case 1: return this.colonToken; + case 2: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitLabeledStatement(this); + } } export class DoStatementSyntax extends SyntaxNode implements IStatementSyntax { public doKeyword: ISyntaxToken; @@ -839,6 +1812,31 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.DoStatement; + } + + public childCount(): number { + return 7; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.doKeyword; + case 1: return this.statement; + case 2: return this.whileKeyword; + case 3: return this.openParenToken; + case 4: return this.condition; + case 5: return this.closeParenToken; + case 6: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitDoStatement(this); + } } export class DebuggerStatementSyntax extends SyntaxNode implements IStatementSyntax { public debuggerKeyword: ISyntaxToken; @@ -851,6 +1849,26 @@ module TypeScript.Syntax.Concrete { debuggerKeyword.parent = this, semicolonToken && (semicolonToken.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.DebuggerStatement; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.debuggerKeyword; + case 1: return this.semicolonToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitDebuggerStatement(this); + } } export class WithStatementSyntax extends SyntaxNode implements IStatementSyntax { public withKeyword: ISyntaxToken; @@ -872,6 +1890,29 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.WithStatement; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.withKeyword; + case 1: return this.openParenToken; + case 2: return this.condition; + case 3: return this.closeParenToken; + case 4: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitWithStatement(this); + } } export class PrefixUnaryExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public operatorToken: ISyntaxToken; @@ -884,6 +1925,26 @@ module TypeScript.Syntax.Concrete { operatorToken.parent = this, operand.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.PrefixUnaryExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.operatorToken; + case 1: return this.operand; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitPrefixUnaryExpression(this); + } } export class DeleteExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public deleteKeyword: ISyntaxToken; @@ -896,6 +1957,26 @@ module TypeScript.Syntax.Concrete { deleteKeyword.parent = this, expression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.DeleteExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.deleteKeyword; + case 1: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitDeleteExpression(this); + } } export class TypeOfExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public typeOfKeyword: ISyntaxToken; @@ -908,6 +1989,26 @@ module TypeScript.Syntax.Concrete { typeOfKeyword.parent = this, expression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TypeOfExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.typeOfKeyword; + case 1: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeOfExpression(this); + } } export class VoidExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public voidKeyword: ISyntaxToken; @@ -920,6 +2021,26 @@ module TypeScript.Syntax.Concrete { voidKeyword.parent = this, expression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.VoidExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.voidKeyword; + case 1: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitVoidExpression(this); + } } export class ConditionalExpressionSyntax extends SyntaxNode implements IExpressionSyntax { public condition: IExpressionSyntax; @@ -941,6 +2062,29 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, whenFalse.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ConditionalExpression; + } + + public childCount(): number { + return 5; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.condition; + case 1: return this.questionToken; + case 2: return this.whenTrue; + case 3: return this.colonToken; + case 4: return this.whenFalse; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitConditionalExpression(this); + } } export class BinaryExpressionSyntax extends SyntaxNode implements IExpressionSyntax { public left: IExpressionSyntax; @@ -956,6 +2100,27 @@ module TypeScript.Syntax.Concrete { operatorToken.parent = this, right.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.BinaryExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.left; + case 1: return this.operatorToken; + case 2: return this.right; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitBinaryExpression(this); + } } export class PostfixUnaryExpressionSyntax extends SyntaxNode implements IPostfixExpressionSyntax { public operand: ILeftHandSideExpressionSyntax; @@ -968,6 +2133,26 @@ module TypeScript.Syntax.Concrete { operand.parent = this, operatorToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.PostfixUnaryExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.operand; + case 1: return this.operatorToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitPostfixUnaryExpression(this); + } } export class MemberAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { public expression: ILeftHandSideExpressionSyntax; @@ -983,6 +2168,27 @@ module TypeScript.Syntax.Concrete { dotToken.parent = this, name.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.MemberAccessExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.expression; + case 1: return this.dotToken; + case 2: return this.name; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitMemberAccessExpression(this); + } } export class InvocationExpressionSyntax extends SyntaxNode implements ICallExpressionSyntax { public expression: ILeftHandSideExpressionSyntax; @@ -995,6 +2201,26 @@ module TypeScript.Syntax.Concrete { expression.parent = this, argumentList.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.InvocationExpression; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.expression; + case 1: return this.argumentList; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitInvocationExpression(this); + } } export class ArrayLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { public openBracketToken: ISyntaxToken; @@ -1010,6 +2236,27 @@ module TypeScript.Syntax.Concrete { !isShared(expressions) && (expressions.parent = this), closeBracketToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ArrayLiteralExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBracketToken; + case 1: return this.expressions; + case 2: return this.closeBracketToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitArrayLiteralExpression(this); + } } export class ObjectLiteralExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { public openBraceToken: ISyntaxToken; @@ -1025,6 +2272,27 @@ module TypeScript.Syntax.Concrete { !isShared(propertyAssignments) && (propertyAssignments.parent = this), closeBraceToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ObjectLiteralExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openBraceToken; + case 1: return this.propertyAssignments; + case 2: return this.closeBraceToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitObjectLiteralExpression(this); + } } export class ObjectCreationExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { public newKeyword: ISyntaxToken; @@ -1040,6 +2308,27 @@ module TypeScript.Syntax.Concrete { expression.parent = this, argumentList && (argumentList.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ObjectCreationExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.newKeyword; + case 1: return this.expression; + case 2: return this.argumentList; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitObjectCreationExpression(this); + } } export class ParenthesizedExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { public openParenToken: ISyntaxToken; @@ -1055,6 +2344,27 @@ module TypeScript.Syntax.Concrete { expression.parent = this, closeParenToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ParenthesizedExpression; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openParenToken; + case 1: return this.expression; + case 2: return this.closeParenToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitParenthesizedExpression(this); + } } export class ParenthesizedArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public callSignature: CallSignatureSyntax; @@ -1073,6 +2383,28 @@ module TypeScript.Syntax.Concrete { block && (block.parent = this), expression && (expression.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.ParenthesizedArrowFunctionExpression; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.callSignature; + case 1: return this.equalsGreaterThanToken; + case 2: return this.block; + case 3: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitParenthesizedArrowFunctionExpression(this); + } } export class SimpleArrowFunctionExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public parameter: ParameterSyntax; @@ -1091,6 +2423,28 @@ module TypeScript.Syntax.Concrete { block && (block.parent = this), expression && (expression.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.SimpleArrowFunctionExpression; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.parameter; + case 1: return this.equalsGreaterThanToken; + case 2: return this.block; + case 3: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitSimpleArrowFunctionExpression(this); + } } export class CastExpressionSyntax extends SyntaxNode implements IUnaryExpressionSyntax { public lessThanToken: ISyntaxToken; @@ -1109,6 +2463,28 @@ module TypeScript.Syntax.Concrete { greaterThanToken.parent = this, expression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.CastExpression; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.lessThanToken; + case 1: return this.type; + case 2: return this.greaterThanToken; + case 3: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitCastExpression(this); + } } export class ElementAccessExpressionSyntax extends SyntaxNode implements IMemberExpressionSyntax, ICallExpressionSyntax { public expression: ILeftHandSideExpressionSyntax; @@ -1127,6 +2503,28 @@ module TypeScript.Syntax.Concrete { argumentExpression.parent = this, closeBracketToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ElementAccessExpression; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.expression; + case 1: return this.openBracketToken; + case 2: return this.argumentExpression; + case 3: return this.closeBracketToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitElementAccessExpression(this); + } } export class FunctionExpressionSyntax extends SyntaxNode implements IPrimaryExpressionSyntax { public functionKeyword: ISyntaxToken; @@ -1145,12 +2543,50 @@ module TypeScript.Syntax.Concrete { callSignature.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.FunctionExpression; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.functionKeyword; + case 1: return this.identifier; + case 2: return this.callSignature; + case 3: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitFunctionExpression(this); + } } export class OmittedExpressionSyntax extends SyntaxNode implements IExpressionSyntax { public _expressionBrand: any; constructor(data: number) { super(data); } + + public kind(): SyntaxKind { + return SyntaxKind.OmittedExpression; + } + + public childCount(): number { + return 0; + } + + public childAt(slot: number): ISyntaxElement { + throw Errors.invalidOperation(); + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitOmittedExpression(this); + } } export class VariableDeclarationSyntax extends SyntaxNode { public varKeyword: ISyntaxToken; @@ -1162,6 +2598,26 @@ module TypeScript.Syntax.Concrete { varKeyword.parent = this, !isShared(variableDeclarators) && (variableDeclarators.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.VariableDeclaration; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.varKeyword; + case 1: return this.variableDeclarators; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitVariableDeclaration(this); + } } export class VariableDeclaratorSyntax extends SyntaxNode { public propertyName: ISyntaxToken; @@ -1176,6 +2632,27 @@ module TypeScript.Syntax.Concrete { typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.VariableDeclarator; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.typeAnnotation; + case 2: return this.equalsValueClause; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitVariableDeclarator(this); + } } export class ArgumentListSyntax extends SyntaxNode { public typeArgumentList: TypeArgumentListSyntax; @@ -1193,6 +2670,28 @@ module TypeScript.Syntax.Concrete { !isShared(_arguments) && (_arguments.parent = this), closeParenToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ArgumentList; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.typeArgumentList; + case 1: return this.openParenToken; + case 2: return this.arguments; + case 3: return this.closeParenToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitArgumentList(this); + } } export class ParameterListSyntax extends SyntaxNode { public openParenToken: ISyntaxToken; @@ -1207,6 +2706,27 @@ module TypeScript.Syntax.Concrete { !isShared(parameters) && (parameters.parent = this), closeParenToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ParameterList; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.openParenToken; + case 1: return this.parameters; + case 2: return this.closeParenToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitParameterList(this); + } } export class TypeArgumentListSyntax extends SyntaxNode { public lessThanToken: ISyntaxToken; @@ -1221,6 +2741,27 @@ module TypeScript.Syntax.Concrete { !isShared(typeArguments) && (typeArguments.parent = this), greaterThanToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TypeArgumentList; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.lessThanToken; + case 1: return this.typeArguments; + case 2: return this.greaterThanToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeArgumentList(this); + } } export class TypeParameterListSyntax extends SyntaxNode { public lessThanToken: ISyntaxToken; @@ -1235,6 +2776,27 @@ module TypeScript.Syntax.Concrete { !isShared(typeParameters) && (typeParameters.parent = this), greaterThanToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TypeParameterList; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.lessThanToken; + case 1: return this.typeParameters; + case 2: return this.greaterThanToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeParameterList(this); + } } export class HeritageClauseSyntax extends SyntaxNode { public extendsOrImplementsKeyword: ISyntaxToken; @@ -1246,6 +2808,26 @@ module TypeScript.Syntax.Concrete { extendsOrImplementsKeyword.parent = this, !isShared(typeNames) && (typeNames.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.HeritageClause; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.extendsOrImplementsKeyword; + case 1: return this.typeNames; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitHeritageClause(this); + } } export class EqualsValueClauseSyntax extends SyntaxNode { public equalsToken: ISyntaxToken; @@ -1257,6 +2839,26 @@ module TypeScript.Syntax.Concrete { equalsToken.parent = this, value.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.EqualsValueClause; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.equalsToken; + case 1: return this.value; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitEqualsValueClause(this); + } } export class CaseSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { public caseKeyword: ISyntaxToken; @@ -1275,6 +2877,28 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, !isShared(statements) && (statements.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.CaseSwitchClause; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.caseKeyword; + case 1: return this.expression; + case 2: return this.colonToken; + case 3: return this.statements; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitCaseSwitchClause(this); + } } export class DefaultSwitchClauseSyntax extends SyntaxNode implements ISwitchClauseSyntax { public defaultKeyword: ISyntaxToken; @@ -1290,6 +2914,27 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, !isShared(statements) && (statements.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.DefaultSwitchClause; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.defaultKeyword; + case 1: return this.colonToken; + case 2: return this.statements; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitDefaultSwitchClause(this); + } } export class ElseClauseSyntax extends SyntaxNode { public elseKeyword: ISyntaxToken; @@ -1301,6 +2946,26 @@ module TypeScript.Syntax.Concrete { elseKeyword.parent = this, statement.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ElseClause; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.elseKeyword; + case 1: return this.statement; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitElseClause(this); + } } export class CatchClauseSyntax extends SyntaxNode { public catchKeyword: ISyntaxToken; @@ -1324,6 +2989,30 @@ module TypeScript.Syntax.Concrete { closeParenToken.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.CatchClause; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.catchKeyword; + case 1: return this.openParenToken; + case 2: return this.identifier; + case 3: return this.typeAnnotation; + case 4: return this.closeParenToken; + case 5: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitCatchClause(this); + } } export class FinallyClauseSyntax extends SyntaxNode { public finallyKeyword: ISyntaxToken; @@ -1335,6 +3024,26 @@ module TypeScript.Syntax.Concrete { finallyKeyword.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.FinallyClause; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.finallyKeyword; + case 1: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitFinallyClause(this); + } } export class TypeParameterSyntax extends SyntaxNode { public identifier: ISyntaxToken; @@ -1346,6 +3055,26 @@ module TypeScript.Syntax.Concrete { identifier.parent = this, constraint && (constraint.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.TypeParameter; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.identifier; + case 1: return this.constraint; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeParameter(this); + } } export class ConstraintSyntax extends SyntaxNode { public extendsKeyword: ISyntaxToken; @@ -1357,6 +3086,26 @@ module TypeScript.Syntax.Concrete { extendsKeyword.parent = this, typeOrExpression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.Constraint; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.extendsKeyword; + case 1: return this.typeOrExpression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitConstraint(this); + } } export class SimplePropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { public propertyName: ISyntaxToken; @@ -1372,6 +3121,27 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, expression.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.SimplePropertyAssignment; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.colonToken; + case 2: return this.expression; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitSimplePropertyAssignment(this); + } } export class FunctionPropertyAssignmentSyntax extends SyntaxNode implements IPropertyAssignmentSyntax { public propertyName: ISyntaxToken; @@ -1387,6 +3157,27 @@ module TypeScript.Syntax.Concrete { callSignature.parent = this, block.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.FunctionPropertyAssignment; + } + + public childCount(): number { + return 3; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.callSignature; + case 2: return this.block; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitFunctionPropertyAssignment(this); + } } export class ParameterSyntax extends SyntaxNode { public dotDotDotToken: ISyntaxToken; @@ -1410,6 +3201,30 @@ module TypeScript.Syntax.Concrete { typeAnnotation && (typeAnnotation.parent = this), equalsValueClause && (equalsValueClause.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.Parameter; + } + + public childCount(): number { + return 6; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.dotDotDotToken; + case 1: return this.modifiers; + case 2: return this.identifier; + case 3: return this.questionToken; + case 4: return this.typeAnnotation; + case 5: return this.equalsValueClause; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitParameter(this); + } } export class EnumElementSyntax extends SyntaxNode { public propertyName: ISyntaxToken; @@ -1421,6 +3236,26 @@ module TypeScript.Syntax.Concrete { propertyName.parent = this, equalsValueClause && (equalsValueClause.parent = this); } + + public kind(): SyntaxKind { + return SyntaxKind.EnumElement; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.propertyName; + case 1: return this.equalsValueClause; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitEnumElement(this); + } } export class TypeAnnotationSyntax extends SyntaxNode { public colonToken: ISyntaxToken; @@ -1432,6 +3267,26 @@ module TypeScript.Syntax.Concrete { colonToken.parent = this, type.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.TypeAnnotation; + } + + public childCount(): number { + return 2; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.colonToken; + case 1: return this.type; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitTypeAnnotation(this); + } } export class ExternalModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { public requireKeyword: ISyntaxToken; @@ -1450,6 +3305,28 @@ module TypeScript.Syntax.Concrete { stringLiteral.parent = this, closeParenToken.parent = this; } + + public kind(): SyntaxKind { + return SyntaxKind.ExternalModuleReference; + } + + public childCount(): number { + return 4; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.requireKeyword; + case 1: return this.openParenToken; + case 2: return this.stringLiteral; + case 3: return this.closeParenToken; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitExternalModuleReference(this); + } } export class ModuleNameModuleReferenceSyntax extends SyntaxNode implements IModuleReferenceSyntax { public moduleName: INameSyntax; @@ -1459,7 +3336,24 @@ module TypeScript.Syntax.Concrete { this.moduleName = moduleName, moduleName.parent = this; } - } - (SourceUnitSyntax).prototype.__kind = SyntaxKind.SourceUnit, (QualifiedNameSyntax).prototype.__kind = SyntaxKind.QualifiedName, (ObjectTypeSyntax).prototype.__kind = SyntaxKind.ObjectType, (FunctionTypeSyntax).prototype.__kind = SyntaxKind.FunctionType, (ArrayTypeSyntax).prototype.__kind = SyntaxKind.ArrayType, (ConstructorTypeSyntax).prototype.__kind = SyntaxKind.ConstructorType, (GenericTypeSyntax).prototype.__kind = SyntaxKind.GenericType, (TypeQuerySyntax).prototype.__kind = SyntaxKind.TypeQuery, (TupleTypeSyntax).prototype.__kind = SyntaxKind.TupleType, (UnionTypeSyntax).prototype.__kind = SyntaxKind.UnionType, (ParenthesizedTypeSyntax).prototype.__kind = SyntaxKind.ParenthesizedType, (InterfaceDeclarationSyntax).prototype.__kind = SyntaxKind.InterfaceDeclaration, (FunctionDeclarationSyntax).prototype.__kind = SyntaxKind.FunctionDeclaration, (ModuleDeclarationSyntax).prototype.__kind = SyntaxKind.ModuleDeclaration, (ClassDeclarationSyntax).prototype.__kind = SyntaxKind.ClassDeclaration, (EnumDeclarationSyntax).prototype.__kind = SyntaxKind.EnumDeclaration, (ImportDeclarationSyntax).prototype.__kind = SyntaxKind.ImportDeclaration, (ExportAssignmentSyntax).prototype.__kind = SyntaxKind.ExportAssignment, (MemberFunctionDeclarationSyntax).prototype.__kind = SyntaxKind.MemberFunctionDeclaration, (MemberVariableDeclarationSyntax).prototype.__kind = SyntaxKind.MemberVariableDeclaration, (ConstructorDeclarationSyntax).prototype.__kind = SyntaxKind.ConstructorDeclaration, (IndexMemberDeclarationSyntax).prototype.__kind = SyntaxKind.IndexMemberDeclaration, (GetAccessorSyntax).prototype.__kind = SyntaxKind.GetAccessor, (SetAccessorSyntax).prototype.__kind = SyntaxKind.SetAccessor, (PropertySignatureSyntax).prototype.__kind = SyntaxKind.PropertySignature, (CallSignatureSyntax).prototype.__kind = SyntaxKind.CallSignature, (ConstructSignatureSyntax).prototype.__kind = SyntaxKind.ConstructSignature, (IndexSignatureSyntax).prototype.__kind = SyntaxKind.IndexSignature, (MethodSignatureSyntax).prototype.__kind = SyntaxKind.MethodSignature, (BlockSyntax).prototype.__kind = SyntaxKind.Block, (IfStatementSyntax).prototype.__kind = SyntaxKind.IfStatement, (VariableStatementSyntax).prototype.__kind = SyntaxKind.VariableStatement, (ExpressionStatementSyntax).prototype.__kind = SyntaxKind.ExpressionStatement, (ReturnStatementSyntax).prototype.__kind = SyntaxKind.ReturnStatement, (SwitchStatementSyntax).prototype.__kind = SyntaxKind.SwitchStatement, (BreakStatementSyntax).prototype.__kind = SyntaxKind.BreakStatement, (ContinueStatementSyntax).prototype.__kind = SyntaxKind.ContinueStatement, (ForStatementSyntax).prototype.__kind = SyntaxKind.ForStatement, (ForInStatementSyntax).prototype.__kind = SyntaxKind.ForInStatement, (EmptyStatementSyntax).prototype.__kind = SyntaxKind.EmptyStatement, (ThrowStatementSyntax).prototype.__kind = SyntaxKind.ThrowStatement, (WhileStatementSyntax).prototype.__kind = SyntaxKind.WhileStatement, (TryStatementSyntax).prototype.__kind = SyntaxKind.TryStatement, (LabeledStatementSyntax).prototype.__kind = SyntaxKind.LabeledStatement, (DoStatementSyntax).prototype.__kind = SyntaxKind.DoStatement, (DebuggerStatementSyntax).prototype.__kind = SyntaxKind.DebuggerStatement, (WithStatementSyntax).prototype.__kind = SyntaxKind.WithStatement, (PrefixUnaryExpressionSyntax).prototype.__kind = SyntaxKind.PrefixUnaryExpression, (DeleteExpressionSyntax).prototype.__kind = SyntaxKind.DeleteExpression, (TypeOfExpressionSyntax).prototype.__kind = SyntaxKind.TypeOfExpression, (VoidExpressionSyntax).prototype.__kind = SyntaxKind.VoidExpression, (ConditionalExpressionSyntax).prototype.__kind = SyntaxKind.ConditionalExpression, (BinaryExpressionSyntax).prototype.__kind = SyntaxKind.BinaryExpression, (PostfixUnaryExpressionSyntax).prototype.__kind = SyntaxKind.PostfixUnaryExpression, (MemberAccessExpressionSyntax).prototype.__kind = SyntaxKind.MemberAccessExpression, (InvocationExpressionSyntax).prototype.__kind = SyntaxKind.InvocationExpression, (ArrayLiteralExpressionSyntax).prototype.__kind = SyntaxKind.ArrayLiteralExpression, (ObjectLiteralExpressionSyntax).prototype.__kind = SyntaxKind.ObjectLiteralExpression, (ObjectCreationExpressionSyntax).prototype.__kind = SyntaxKind.ObjectCreationExpression, (ParenthesizedExpressionSyntax).prototype.__kind = SyntaxKind.ParenthesizedExpression, (ParenthesizedArrowFunctionExpressionSyntax).prototype.__kind = SyntaxKind.ParenthesizedArrowFunctionExpression, (SimpleArrowFunctionExpressionSyntax).prototype.__kind = SyntaxKind.SimpleArrowFunctionExpression, (CastExpressionSyntax).prototype.__kind = SyntaxKind.CastExpression, (ElementAccessExpressionSyntax).prototype.__kind = SyntaxKind.ElementAccessExpression, (FunctionExpressionSyntax).prototype.__kind = SyntaxKind.FunctionExpression, (OmittedExpressionSyntax).prototype.__kind = SyntaxKind.OmittedExpression, (VariableDeclarationSyntax).prototype.__kind = SyntaxKind.VariableDeclaration, (VariableDeclaratorSyntax).prototype.__kind = SyntaxKind.VariableDeclarator, (ArgumentListSyntax).prototype.__kind = SyntaxKind.ArgumentList, (ParameterListSyntax).prototype.__kind = SyntaxKind.ParameterList, (TypeArgumentListSyntax).prototype.__kind = SyntaxKind.TypeArgumentList, (TypeParameterListSyntax).prototype.__kind = SyntaxKind.TypeParameterList, (HeritageClauseSyntax).prototype.__kind = SyntaxKind.HeritageClause, (EqualsValueClauseSyntax).prototype.__kind = SyntaxKind.EqualsValueClause, (CaseSwitchClauseSyntax).prototype.__kind = SyntaxKind.CaseSwitchClause, (DefaultSwitchClauseSyntax).prototype.__kind = SyntaxKind.DefaultSwitchClause, (ElseClauseSyntax).prototype.__kind = SyntaxKind.ElseClause, (CatchClauseSyntax).prototype.__kind = SyntaxKind.CatchClause, (FinallyClauseSyntax).prototype.__kind = SyntaxKind.FinallyClause, (TypeParameterSyntax).prototype.__kind = SyntaxKind.TypeParameter, (ConstraintSyntax).prototype.__kind = SyntaxKind.Constraint, (SimplePropertyAssignmentSyntax).prototype.__kind = SyntaxKind.SimplePropertyAssignment, (FunctionPropertyAssignmentSyntax).prototype.__kind = SyntaxKind.FunctionPropertyAssignment, (ParameterSyntax).prototype.__kind = SyntaxKind.Parameter, (EnumElementSyntax).prototype.__kind = SyntaxKind.EnumElement, (TypeAnnotationSyntax).prototype.__kind = SyntaxKind.TypeAnnotation, (ExternalModuleReferenceSyntax).prototype.__kind = SyntaxKind.ExternalModuleReference, (ModuleNameModuleReferenceSyntax).prototype.__kind = SyntaxKind.ModuleNameModuleReference; + public kind(): SyntaxKind { + return SyntaxKind.ModuleNameModuleReference; + } + + public childCount(): number { + return 1; + } + + public childAt(slot: number): ISyntaxElement { + switch (slot) { + case 0: return this.moduleName; + default: throw Errors.invalidOperation(); + } + } + + public accept(visitor: ISyntaxVisitor): SyntaxKind { + return visitor.visitModuleNameModuleReference(this); + } + } } \ No newline at end of file diff --git a/src/services/syntax/syntaxNodes.interfaces.generated.ts b/src/services/syntax/syntaxNodes.interfaces.generated.ts index 700910c344d..dd3841719fd 100644 --- a/src/services/syntax/syntaxNodes.interfaces.generated.ts +++ b/src/services/syntax/syntaxNodes.interfaces.generated.ts @@ -493,8 +493,6 @@ module TypeScript { moduleName: INameSyntax; } - export var nodeMetadata: string[][] = [[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],["moduleElements","endOfFileToken"],["left","dotToken","right"],["openBraceToken","typeMembers","closeBraceToken"],["typeParameterList","parameterList","equalsGreaterThanToken","type"],["type","openBracketToken","closeBracketToken"],["newKeyword","typeParameterList","parameterList","equalsGreaterThanToken","type"],["name","typeArgumentList"],["typeOfKeyword","name"],["openBracketToken","types","closeBracketToken"],["left","barToken","right"],["openParenToken","type","closeParenToken"],["modifiers","interfaceKeyword","identifier","typeParameterList","heritageClauses","body"],["modifiers","functionKeyword","identifier","callSignature","block","semicolonToken"],["modifiers","moduleKeyword","name","stringLiteral","openBraceToken","moduleElements","closeBraceToken"],["modifiers","classKeyword","identifier","typeParameterList","heritageClauses","openBraceToken","classElements","closeBraceToken"],["modifiers","enumKeyword","identifier","openBraceToken","enumElements","closeBraceToken"],["modifiers","importKeyword","identifier","equalsToken","moduleReference","semicolonToken"],["exportKeyword","equalsToken","identifier","semicolonToken"],["modifiers","propertyName","callSignature","block","semicolonToken"],["modifiers","variableDeclarator","semicolonToken"],["modifiers","constructorKeyword","callSignature","block","semicolonToken"],["modifiers","indexSignature","semicolonToken"],["modifiers","getKeyword","propertyName","callSignature","block"],["modifiers","setKeyword","propertyName","callSignature","block"],["propertyName","questionToken","typeAnnotation"],["typeParameterList","parameterList","typeAnnotation"],["newKeyword","callSignature"],["openBracketToken","parameters","closeBracketToken","typeAnnotation"],["propertyName","questionToken","callSignature"],["openBraceToken","statements","closeBraceToken"],["ifKeyword","openParenToken","condition","closeParenToken","statement","elseClause"],["modifiers","variableDeclaration","semicolonToken"],["expression","semicolonToken"],["returnKeyword","expression","semicolonToken"],["switchKeyword","openParenToken","expression","closeParenToken","openBraceToken","switchClauses","closeBraceToken"],["breakKeyword","identifier","semicolonToken"],["continueKeyword","identifier","semicolonToken"],["forKeyword","openParenToken","variableDeclaration","initializer","firstSemicolonToken","condition","secondSemicolonToken","incrementor","closeParenToken","statement"],["forKeyword","openParenToken","variableDeclaration","left","inKeyword","expression","closeParenToken","statement"],["semicolonToken"],["throwKeyword","expression","semicolonToken"],["whileKeyword","openParenToken","condition","closeParenToken","statement"],["tryKeyword","block","catchClause","finallyClause"],["identifier","colonToken","statement"],["doKeyword","statement","whileKeyword","openParenToken","condition","closeParenToken","semicolonToken"],["debuggerKeyword","semicolonToken"],["withKeyword","openParenToken","condition","closeParenToken","statement"],["operatorToken","operand"],["deleteKeyword","expression"],["typeOfKeyword","expression"],["voidKeyword","expression"],["condition","questionToken","whenTrue","colonToken","whenFalse"],["left","operatorToken","right"],["operand","operatorToken"],["expression","dotToken","name"],["expression","argumentList"],["openBracketToken","expressions","closeBracketToken"],["openBraceToken","propertyAssignments","closeBraceToken"],["newKeyword","expression","argumentList"],["openParenToken","expression","closeParenToken"],["callSignature","equalsGreaterThanToken","block","expression"],["parameter","equalsGreaterThanToken","block","expression"],["lessThanToken","type","greaterThanToken","expression"],["expression","openBracketToken","argumentExpression","closeBracketToken"],["functionKeyword","identifier","callSignature","block"],[],["varKeyword","variableDeclarators"],["propertyName","typeAnnotation","equalsValueClause"],["typeArgumentList","openParenToken","arguments","closeParenToken"],["openParenToken","parameters","closeParenToken"],["lessThanToken","typeArguments","greaterThanToken"],["lessThanToken","typeParameters","greaterThanToken"],["extendsOrImplementsKeyword","typeNames"],["equalsToken","value"],["caseKeyword","expression","colonToken","statements"],["defaultKeyword","colonToken","statements"],["elseKeyword","statement"],["catchKeyword","openParenToken","identifier","typeAnnotation","closeParenToken","block"],["finallyKeyword","block"],["identifier","constraint"],["extendsKeyword","typeOrExpression"],["propertyName","colonToken","expression"],["propertyName","callSignature","block"],["dotDotDotToken","modifiers","identifier","questionToken","typeAnnotation","equalsValueClause"],["propertyName","equalsValueClause"],["colonToken","type"],["requireKeyword","openParenToken","stringLiteral","closeParenToken"],["moduleName"],]; - export module Syntax { export interface ISyntaxFactory { isConcrete: boolean; diff --git a/src/services/syntax/syntaxToken.ts b/src/services/syntax/syntaxToken.ts index 857ffde59c0..0ded9c44891 100644 --- a/src/services/syntax/syntaxToken.ts +++ b/src/services/syntax/syntaxToken.ts @@ -297,6 +297,10 @@ module TypeScript.Syntax { return this._kind; } + public childCount() { return 0 } + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } + public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) } + public clone(): ISyntaxToken { return new EmptyToken(this.kind()); } @@ -352,8 +356,8 @@ module TypeScript.Syntax { } // Ok. We have a parent. First, find out which slot we're at in the parent. - for (var i = 0, n = childCount(parent); i < n; i++) { - if (childAt(parent, i) === current) { + for (var i = 0, n = parent.childCount(); i < n; i++) { + if (parent.childAt(i) === current) { break; } } @@ -362,7 +366,7 @@ module TypeScript.Syntax { // Walk backward from this element, looking for a non-zero-width sibling. for (var j = i - 1; j >= 0; j--) { - var sibling = childAt(parent, j); + var sibling = parent.childAt(j); if (sibling && fullWidth(sibling) > 0) { return sibling; } @@ -435,6 +439,10 @@ module TypeScript.Syntax { public kind(): SyntaxKind { return this._kind; } + + public childCount() { return 0 } + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } + public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) } public clone(): ISyntaxToken { return new RealizedToken(this._fullStart, this.kind(), this._isKeywordConvertedToIdentifier, this._leadingTrivia, this._text, this._trailingTrivia); @@ -481,6 +489,10 @@ module TypeScript.Syntax { this.underlyingToken.setFullStart(fullStart); } + public childCount() { return 0 } + public childAt(index: number): ISyntaxElement { throw Errors.invalidOperation() } + public accept(visitor: ISyntaxVisitor): any { return visitor.visitToken(this) } + public fullStart(): number { return this.underlyingToken.fullStart(); } diff --git a/src/services/syntax/syntaxTree.ts b/src/services/syntax/syntaxTree.ts index 30aa3d7e979..5d2584f6b61 100644 --- a/src/services/syntax/syntaxTree.ts +++ b/src/services/syntax/syntaxTree.ts @@ -255,18 +255,18 @@ module TypeScript { private checkForTrailingComma(list: ISyntaxNodeOrToken[]): boolean { // If we have at least one child, and we have an even number of children, then that // means we have an illegal trailing separator. - if (childCount(list) === 0 || childCount(list) % 2 === 1) { + if (list.childCount() === 0 || list.childCount() % 2 === 1) { return false; } - var child = childAt(list, childCount(list) - 1); + var child = list.childAt(list.childCount() - 1); this.pushDiagnostic(child, DiagnosticCode.Trailing_comma_not_allowed); return true; } private checkForAtLeastOneElement(parent: ISyntaxElement, list: ISyntaxNodeOrToken[], reportToken: ISyntaxToken, listKind: string): boolean { - if (childCount(list) > 0) { + if (list.childCount() > 0) { return false; } @@ -589,7 +589,7 @@ module TypeScript { private checkIndexMemberModifiers(node: IndexMemberDeclarationSyntax): boolean { if (node.modifiers.length > 0) { - this.pushDiagnostic(childAt(node.modifiers, 0), DiagnosticCode.Modifiers_cannot_appear_here); + this.pushDiagnostic(node.modifiers.childAt(0), DiagnosticCode.Modifiers_cannot_appear_here); return true; } @@ -654,7 +654,7 @@ module TypeScript { private checkSetAccessorParameter(node: SetAccessorSyntax): boolean { var parameters = node.callSignature.parameterList.parameters; - if (childCount(parameters) !== 1) { + if (parameters.childCount() !== 1) { this.pushDiagnostic(node.propertyName, DiagnosticCode.set_accessor_must_have_exactly_one_parameter); return true; } @@ -710,8 +710,8 @@ module TypeScript { private checkEnumElements(node: EnumDeclarationSyntax): boolean { var previousValueWasComputed = false; - for (var i = 0, n = childCount(node.enumElements); i < n; i++) { - var child = childAt(node.enumElements, i); + for (var i = 0, n = node.enumElements.childCount(); i < n; i++) { + var child = node.enumElements.childAt(i); if (i % 2 === 0) { var enumElement = child; @@ -1286,7 +1286,7 @@ module TypeScript { private checkForDisallowedModifiers(parent: ISyntaxElement, modifiers: ISyntaxToken[]): boolean { if (this.inBlock || this.inObjectLiteralExpression) { if (modifiers.length > 0) { - this.pushDiagnostic(childAt(modifiers, 0), DiagnosticCode.Modifiers_cannot_appear_here); + this.pushDiagnostic(modifiers.childAt(0), DiagnosticCode.Modifiers_cannot_appear_here); return true; } } @@ -1334,8 +1334,8 @@ module TypeScript { } private checkListSeparators(parent: ISyntaxElement, list: T[], kind: SyntaxKind): boolean { - for (var i = 0, n = childCount(list); i < n; i++) { - var child = childAt(list, i); + for (var i = 0, n = list.childCount(); i < n; i++) { + var child = list.childAt(i); if (i % 2 === 1 && child.kind() !== kind) { this.pushDiagnostic(child, DiagnosticCode._0_expected, [SyntaxFacts.getText(kind)]); } diff --git a/src/services/syntax/syntaxVisitor.generated.ts b/src/services/syntax/syntaxVisitor.generated.ts index 30d3e9ec42c..6a38a81312b 100644 --- a/src/services/syntax/syntaxVisitor.generated.ts +++ b/src/services/syntax/syntaxVisitor.generated.ts @@ -3,99 +3,7 @@ module TypeScript { export function visitNodeOrToken(visitor: ISyntaxVisitor, element: ISyntaxNodeOrToken): any { if (element === undefined) { return undefined; } - if (isToken(element)) { return visitor.visitToken(element); } - switch (element.kind()) { - case SyntaxKind.SourceUnit: return visitor.visitSourceUnit(element); - case SyntaxKind.QualifiedName: return visitor.visitQualifiedName(element); - case SyntaxKind.ObjectType: return visitor.visitObjectType(element); - case SyntaxKind.FunctionType: return visitor.visitFunctionType(element); - case SyntaxKind.ArrayType: return visitor.visitArrayType(element); - case SyntaxKind.ConstructorType: return visitor.visitConstructorType(element); - case SyntaxKind.GenericType: return visitor.visitGenericType(element); - case SyntaxKind.TypeQuery: return visitor.visitTypeQuery(element); - case SyntaxKind.TupleType: return visitor.visitTupleType(element); - case SyntaxKind.UnionType: return visitor.visitUnionType(element); - case SyntaxKind.ParenthesizedType: return visitor.visitParenthesizedType(element); - case SyntaxKind.InterfaceDeclaration: return visitor.visitInterfaceDeclaration(element); - case SyntaxKind.FunctionDeclaration: return visitor.visitFunctionDeclaration(element); - case SyntaxKind.ModuleDeclaration: return visitor.visitModuleDeclaration(element); - case SyntaxKind.ClassDeclaration: return visitor.visitClassDeclaration(element); - case SyntaxKind.EnumDeclaration: return visitor.visitEnumDeclaration(element); - case SyntaxKind.ImportDeclaration: return visitor.visitImportDeclaration(element); - case SyntaxKind.ExportAssignment: return visitor.visitExportAssignment(element); - case SyntaxKind.MemberFunctionDeclaration: return visitor.visitMemberFunctionDeclaration(element); - case SyntaxKind.MemberVariableDeclaration: return visitor.visitMemberVariableDeclaration(element); - case SyntaxKind.ConstructorDeclaration: return visitor.visitConstructorDeclaration(element); - case SyntaxKind.IndexMemberDeclaration: return visitor.visitIndexMemberDeclaration(element); - case SyntaxKind.GetAccessor: return visitor.visitGetAccessor(element); - case SyntaxKind.SetAccessor: return visitor.visitSetAccessor(element); - case SyntaxKind.PropertySignature: return visitor.visitPropertySignature(element); - case SyntaxKind.CallSignature: return visitor.visitCallSignature(element); - case SyntaxKind.ConstructSignature: return visitor.visitConstructSignature(element); - case SyntaxKind.IndexSignature: return visitor.visitIndexSignature(element); - case SyntaxKind.MethodSignature: return visitor.visitMethodSignature(element); - case SyntaxKind.Block: return visitor.visitBlock(element); - case SyntaxKind.IfStatement: return visitor.visitIfStatement(element); - case SyntaxKind.VariableStatement: return visitor.visitVariableStatement(element); - case SyntaxKind.ExpressionStatement: return visitor.visitExpressionStatement(element); - case SyntaxKind.ReturnStatement: return visitor.visitReturnStatement(element); - case SyntaxKind.SwitchStatement: return visitor.visitSwitchStatement(element); - case SyntaxKind.BreakStatement: return visitor.visitBreakStatement(element); - case SyntaxKind.ContinueStatement: return visitor.visitContinueStatement(element); - case SyntaxKind.ForStatement: return visitor.visitForStatement(element); - case SyntaxKind.ForInStatement: return visitor.visitForInStatement(element); - case SyntaxKind.EmptyStatement: return visitor.visitEmptyStatement(element); - case SyntaxKind.ThrowStatement: return visitor.visitThrowStatement(element); - case SyntaxKind.WhileStatement: return visitor.visitWhileStatement(element); - case SyntaxKind.TryStatement: return visitor.visitTryStatement(element); - case SyntaxKind.LabeledStatement: return visitor.visitLabeledStatement(element); - case SyntaxKind.DoStatement: return visitor.visitDoStatement(element); - case SyntaxKind.DebuggerStatement: return visitor.visitDebuggerStatement(element); - case SyntaxKind.WithStatement: return visitor.visitWithStatement(element); - case SyntaxKind.PrefixUnaryExpression: return visitor.visitPrefixUnaryExpression(element); - case SyntaxKind.DeleteExpression: return visitor.visitDeleteExpression(element); - case SyntaxKind.TypeOfExpression: return visitor.visitTypeOfExpression(element); - case SyntaxKind.VoidExpression: return visitor.visitVoidExpression(element); - case SyntaxKind.ConditionalExpression: return visitor.visitConditionalExpression(element); - case SyntaxKind.BinaryExpression: return visitor.visitBinaryExpression(element); - case SyntaxKind.PostfixUnaryExpression: return visitor.visitPostfixUnaryExpression(element); - case SyntaxKind.MemberAccessExpression: return visitor.visitMemberAccessExpression(element); - case SyntaxKind.InvocationExpression: return visitor.visitInvocationExpression(element); - case SyntaxKind.ArrayLiteralExpression: return visitor.visitArrayLiteralExpression(element); - case SyntaxKind.ObjectLiteralExpression: return visitor.visitObjectLiteralExpression(element); - case SyntaxKind.ObjectCreationExpression: return visitor.visitObjectCreationExpression(element); - case SyntaxKind.ParenthesizedExpression: return visitor.visitParenthesizedExpression(element); - case SyntaxKind.ParenthesizedArrowFunctionExpression: return visitor.visitParenthesizedArrowFunctionExpression(element); - case SyntaxKind.SimpleArrowFunctionExpression: return visitor.visitSimpleArrowFunctionExpression(element); - case SyntaxKind.CastExpression: return visitor.visitCastExpression(element); - case SyntaxKind.ElementAccessExpression: return visitor.visitElementAccessExpression(element); - case SyntaxKind.FunctionExpression: return visitor.visitFunctionExpression(element); - case SyntaxKind.OmittedExpression: return visitor.visitOmittedExpression(element); - case SyntaxKind.VariableDeclaration: return visitor.visitVariableDeclaration(element); - case SyntaxKind.VariableDeclarator: return visitor.visitVariableDeclarator(element); - case SyntaxKind.ArgumentList: return visitor.visitArgumentList(element); - case SyntaxKind.ParameterList: return visitor.visitParameterList(element); - case SyntaxKind.TypeArgumentList: return visitor.visitTypeArgumentList(element); - case SyntaxKind.TypeParameterList: return visitor.visitTypeParameterList(element); - case SyntaxKind.HeritageClause: return visitor.visitHeritageClause(element); - case SyntaxKind.EqualsValueClause: return visitor.visitEqualsValueClause(element); - case SyntaxKind.CaseSwitchClause: return visitor.visitCaseSwitchClause(element); - case SyntaxKind.DefaultSwitchClause: return visitor.visitDefaultSwitchClause(element); - case SyntaxKind.ElseClause: return visitor.visitElseClause(element); - case SyntaxKind.CatchClause: return visitor.visitCatchClause(element); - case SyntaxKind.FinallyClause: return visitor.visitFinallyClause(element); - case SyntaxKind.TypeParameter: return visitor.visitTypeParameter(element); - case SyntaxKind.Constraint: return visitor.visitConstraint(element); - case SyntaxKind.SimplePropertyAssignment: return visitor.visitSimplePropertyAssignment(element); - case SyntaxKind.FunctionPropertyAssignment: return visitor.visitFunctionPropertyAssignment(element); - case SyntaxKind.Parameter: return visitor.visitParameter(element); - case SyntaxKind.EnumElement: return visitor.visitEnumElement(element); - case SyntaxKind.TypeAnnotation: return visitor.visitTypeAnnotation(element); - case SyntaxKind.ExternalModuleReference: return visitor.visitExternalModuleReference(element); - case SyntaxKind.ModuleNameModuleReference: return visitor.visitModuleNameModuleReference(element); - } - - throw Errors.invalidOperation(); + return element.accept(visitor); } export interface ISyntaxVisitor { diff --git a/src/services/syntax/syntaxWalker.generated.ts b/src/services/syntax/syntaxWalker.generated.ts index 21c1acefc7f..2610017e6ee 100644 --- a/src/services/syntax/syntaxWalker.generated.ts +++ b/src/services/syntax/syntaxWalker.generated.ts @@ -13,16 +13,28 @@ module TypeScript { this.visitToken(token); } + private visitOptionalNode(node: ISyntaxNode): void { + if (node === undefined) { + return; + } + + node.accept(this); + } + public visitList(list: ISyntaxNodeOrToken[]): void { for (var i = 0, n = list.length; i < n; i++) { - visitNodeOrToken(this, list[i]); + list[i].accept(this); } } public visitSeparatedList(list: ISyntaxNodeOrToken[]): void { - for (var i = 0, n = childCount(list); i < n; i++) { - var item = childAt(list, i); - visitNodeOrToken(this, item); + for (var i = 0, n = separatedListChildCount(list); i < n; i++) { + if (i % 2 === 0) { + list[i >> 1].accept(this); + } + else { + this.visitToken(list.separators[i >> 1]); + } } } @@ -32,7 +44,7 @@ module TypeScript { } public visitQualifiedName(node: QualifiedNameSyntax): void { - visitNodeOrToken(this, node.left); + node.left.accept(this); this.visitToken(node.dotToken); this.visitToken(node.right); } @@ -44,34 +56,34 @@ module TypeScript { } public visitFunctionType(node: FunctionTypeSyntax): void { - visitNodeOrToken(this, node.typeParameterList); - visitNodeOrToken(this, node.parameterList); + this.visitOptionalNode(node.typeParameterList); + node.parameterList.accept(this); this.visitToken(node.equalsGreaterThanToken); - visitNodeOrToken(this, node.type); + node.type.accept(this); } public visitArrayType(node: ArrayTypeSyntax): void { - visitNodeOrToken(this, node.type); + node.type.accept(this); this.visitToken(node.openBracketToken); this.visitToken(node.closeBracketToken); } public visitConstructorType(node: ConstructorTypeSyntax): void { this.visitToken(node.newKeyword); - visitNodeOrToken(this, node.typeParameterList); - visitNodeOrToken(this, node.parameterList); + this.visitOptionalNode(node.typeParameterList); + node.parameterList.accept(this); this.visitToken(node.equalsGreaterThanToken); - visitNodeOrToken(this, node.type); + node.type.accept(this); } public visitGenericType(node: GenericTypeSyntax): void { - visitNodeOrToken(this, node.name); - visitNodeOrToken(this, node.typeArgumentList); + node.name.accept(this); + node.typeArgumentList.accept(this); } public visitTypeQuery(node: TypeQuerySyntax): void { this.visitToken(node.typeOfKeyword); - visitNodeOrToken(this, node.name); + node.name.accept(this); } public visitTupleType(node: TupleTypeSyntax): void { @@ -81,14 +93,14 @@ module TypeScript { } public visitUnionType(node: UnionTypeSyntax): void { - visitNodeOrToken(this, node.left); + node.left.accept(this); this.visitToken(node.barToken); - visitNodeOrToken(this, node.right); + node.right.accept(this); } public visitParenthesizedType(node: ParenthesizedTypeSyntax): void { this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.type); + node.type.accept(this); this.visitToken(node.closeParenToken); } @@ -96,17 +108,17 @@ module TypeScript { this.visitList(node.modifiers); this.visitToken(node.interfaceKeyword); this.visitToken(node.identifier); - visitNodeOrToken(this, node.typeParameterList); + this.visitOptionalNode(node.typeParameterList); this.visitList(node.heritageClauses); - visitNodeOrToken(this, node.body); + node.body.accept(this); } public visitFunctionDeclaration(node: FunctionDeclarationSyntax): void { this.visitList(node.modifiers); this.visitToken(node.functionKeyword); this.visitToken(node.identifier); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + this.visitOptionalNode(node.block); this.visitOptionalToken(node.semicolonToken); } @@ -124,7 +136,7 @@ module TypeScript { this.visitList(node.modifiers); this.visitToken(node.classKeyword); this.visitToken(node.identifier); - visitNodeOrToken(this, node.typeParameterList); + this.visitOptionalNode(node.typeParameterList); this.visitList(node.heritageClauses); this.visitToken(node.openBraceToken); this.visitList(node.classElements); @@ -145,7 +157,7 @@ module TypeScript { this.visitToken(node.importKeyword); this.visitToken(node.identifier); this.visitToken(node.equalsToken); - visitNodeOrToken(this, node.moduleReference); + node.moduleReference.accept(this); this.visitOptionalToken(node.semicolonToken); } @@ -159,28 +171,28 @@ module TypeScript { public visitMemberFunctionDeclaration(node: MemberFunctionDeclarationSyntax): void { this.visitList(node.modifiers); this.visitToken(node.propertyName); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + this.visitOptionalNode(node.block); this.visitOptionalToken(node.semicolonToken); } public visitMemberVariableDeclaration(node: MemberVariableDeclarationSyntax): void { this.visitList(node.modifiers); - visitNodeOrToken(this, node.variableDeclarator); + node.variableDeclarator.accept(this); this.visitOptionalToken(node.semicolonToken); } public visitConstructorDeclaration(node: ConstructorDeclarationSyntax): void { this.visitList(node.modifiers); this.visitToken(node.constructorKeyword); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + this.visitOptionalNode(node.block); this.visitOptionalToken(node.semicolonToken); } public visitIndexMemberDeclaration(node: IndexMemberDeclarationSyntax): void { this.visitList(node.modifiers); - visitNodeOrToken(this, node.indexSignature); + node.indexSignature.accept(this); this.visitOptionalToken(node.semicolonToken); } @@ -188,46 +200,46 @@ module TypeScript { this.visitList(node.modifiers); this.visitToken(node.getKeyword); this.visitToken(node.propertyName); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + node.block.accept(this); } public visitSetAccessor(node: SetAccessorSyntax): void { this.visitList(node.modifiers); this.visitToken(node.setKeyword); this.visitToken(node.propertyName); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + node.block.accept(this); } public visitPropertySignature(node: PropertySignatureSyntax): void { this.visitToken(node.propertyName); this.visitOptionalToken(node.questionToken); - visitNodeOrToken(this, node.typeAnnotation); + this.visitOptionalNode(node.typeAnnotation); } public visitCallSignature(node: CallSignatureSyntax): void { - visitNodeOrToken(this, node.typeParameterList); - visitNodeOrToken(this, node.parameterList); - visitNodeOrToken(this, node.typeAnnotation); + this.visitOptionalNode(node.typeParameterList); + node.parameterList.accept(this); + this.visitOptionalNode(node.typeAnnotation); } public visitConstructSignature(node: ConstructSignatureSyntax): void { this.visitToken(node.newKeyword); - visitNodeOrToken(this, node.callSignature); + node.callSignature.accept(this); } public visitIndexSignature(node: IndexSignatureSyntax): void { this.visitToken(node.openBracketToken); this.visitSeparatedList(node.parameters); this.visitToken(node.closeBracketToken); - visitNodeOrToken(this, node.typeAnnotation); + this.visitOptionalNode(node.typeAnnotation); } public visitMethodSignature(node: MethodSignatureSyntax): void { this.visitToken(node.propertyName); this.visitOptionalToken(node.questionToken); - visitNodeOrToken(this, node.callSignature); + node.callSignature.accept(this); } public visitBlock(node: BlockSyntax): void { @@ -239,20 +251,20 @@ module TypeScript { public visitIfStatement(node: IfStatementSyntax): void { this.visitToken(node.ifKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.condition); + node.condition.accept(this); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.statement); - visitNodeOrToken(this, node.elseClause); + node.statement.accept(this); + this.visitOptionalNode(node.elseClause); } public visitVariableStatement(node: VariableStatementSyntax): void { this.visitList(node.modifiers); - visitNodeOrToken(this, node.variableDeclaration); + node.variableDeclaration.accept(this); this.visitOptionalToken(node.semicolonToken); } public visitExpressionStatement(node: ExpressionStatementSyntax): void { - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitOptionalToken(node.semicolonToken); } @@ -265,7 +277,7 @@ module TypeScript { public visitSwitchStatement(node: SwitchStatementSyntax): void { this.visitToken(node.switchKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.closeParenToken); this.visitToken(node.openBraceToken); this.visitList(node.switchClauses); @@ -287,25 +299,25 @@ module TypeScript { public visitForStatement(node: ForStatementSyntax): void { this.visitToken(node.forKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.variableDeclaration); + this.visitOptionalNode(node.variableDeclaration); visitNodeOrToken(this, node.initializer); this.visitToken(node.firstSemicolonToken); visitNodeOrToken(this, node.condition); this.visitToken(node.secondSemicolonToken); visitNodeOrToken(this, node.incrementor); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitForInStatement(node: ForInStatementSyntax): void { this.visitToken(node.forKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.variableDeclaration); + this.visitOptionalNode(node.variableDeclaration); visitNodeOrToken(this, node.left); this.visitToken(node.inKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitEmptyStatement(node: EmptyStatementSyntax): void { @@ -314,37 +326,37 @@ module TypeScript { public visitThrowStatement(node: ThrowStatementSyntax): void { this.visitToken(node.throwKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitOptionalToken(node.semicolonToken); } public visitWhileStatement(node: WhileStatementSyntax): void { this.visitToken(node.whileKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.condition); + node.condition.accept(this); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitTryStatement(node: TryStatementSyntax): void { this.visitToken(node.tryKeyword); - visitNodeOrToken(this, node.block); - visitNodeOrToken(this, node.catchClause); - visitNodeOrToken(this, node.finallyClause); + node.block.accept(this); + this.visitOptionalNode(node.catchClause); + this.visitOptionalNode(node.finallyClause); } public visitLabeledStatement(node: LabeledStatementSyntax): void { this.visitToken(node.identifier); this.visitToken(node.colonToken); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitDoStatement(node: DoStatementSyntax): void { this.visitToken(node.doKeyword); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); this.visitToken(node.whileKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.condition); + node.condition.accept(this); this.visitToken(node.closeParenToken); this.visitOptionalToken(node.semicolonToken); } @@ -357,59 +369,59 @@ module TypeScript { public visitWithStatement(node: WithStatementSyntax): void { this.visitToken(node.withKeyword); this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.condition); + node.condition.accept(this); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitPrefixUnaryExpression(node: PrefixUnaryExpressionSyntax): void { this.visitToken(node.operatorToken); - visitNodeOrToken(this, node.operand); + node.operand.accept(this); } public visitDeleteExpression(node: DeleteExpressionSyntax): void { this.visitToken(node.deleteKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); } public visitTypeOfExpression(node: TypeOfExpressionSyntax): void { this.visitToken(node.typeOfKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); } public visitVoidExpression(node: VoidExpressionSyntax): void { this.visitToken(node.voidKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); } public visitConditionalExpression(node: ConditionalExpressionSyntax): void { - visitNodeOrToken(this, node.condition); + node.condition.accept(this); this.visitToken(node.questionToken); - visitNodeOrToken(this, node.whenTrue); + node.whenTrue.accept(this); this.visitToken(node.colonToken); - visitNodeOrToken(this, node.whenFalse); + node.whenFalse.accept(this); } public visitBinaryExpression(node: BinaryExpressionSyntax): void { - visitNodeOrToken(this, node.left); + node.left.accept(this); this.visitToken(node.operatorToken); - visitNodeOrToken(this, node.right); + node.right.accept(this); } public visitPostfixUnaryExpression(node: PostfixUnaryExpressionSyntax): void { - visitNodeOrToken(this, node.operand); + node.operand.accept(this); this.visitToken(node.operatorToken); } public visitMemberAccessExpression(node: MemberAccessExpressionSyntax): void { - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.dotToken); this.visitToken(node.name); } public visitInvocationExpression(node: InvocationExpressionSyntax): void { - visitNodeOrToken(this, node.expression); - visitNodeOrToken(this, node.argumentList); + node.expression.accept(this); + node.argumentList.accept(this); } public visitArrayLiteralExpression(node: ArrayLiteralExpressionSyntax): void { @@ -426,49 +438,49 @@ module TypeScript { public visitObjectCreationExpression(node: ObjectCreationExpressionSyntax): void { this.visitToken(node.newKeyword); - visitNodeOrToken(this, node.expression); - visitNodeOrToken(this, node.argumentList); + node.expression.accept(this); + this.visitOptionalNode(node.argumentList); } public visitParenthesizedExpression(node: ParenthesizedExpressionSyntax): void { this.visitToken(node.openParenToken); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.closeParenToken); } public visitParenthesizedArrowFunctionExpression(node: ParenthesizedArrowFunctionExpressionSyntax): void { - visitNodeOrToken(this, node.callSignature); + node.callSignature.accept(this); this.visitToken(node.equalsGreaterThanToken); - visitNodeOrToken(this, node.block); + this.visitOptionalNode(node.block); visitNodeOrToken(this, node.expression); } public visitSimpleArrowFunctionExpression(node: SimpleArrowFunctionExpressionSyntax): void { - visitNodeOrToken(this, node.parameter); + node.parameter.accept(this); this.visitToken(node.equalsGreaterThanToken); - visitNodeOrToken(this, node.block); + this.visitOptionalNode(node.block); visitNodeOrToken(this, node.expression); } public visitCastExpression(node: CastExpressionSyntax): void { this.visitToken(node.lessThanToken); - visitNodeOrToken(this, node.type); + node.type.accept(this); this.visitToken(node.greaterThanToken); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); } public visitElementAccessExpression(node: ElementAccessExpressionSyntax): void { - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.openBracketToken); - visitNodeOrToken(this, node.argumentExpression); + node.argumentExpression.accept(this); this.visitToken(node.closeBracketToken); } public visitFunctionExpression(node: FunctionExpressionSyntax): void { this.visitToken(node.functionKeyword); this.visitOptionalToken(node.identifier); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + node.block.accept(this); } public visitOmittedExpression(node: OmittedExpressionSyntax): void { @@ -481,12 +493,12 @@ module TypeScript { public visitVariableDeclarator(node: VariableDeclaratorSyntax): void { this.visitToken(node.propertyName); - visitNodeOrToken(this, node.typeAnnotation); - visitNodeOrToken(this, node.equalsValueClause); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); } public visitArgumentList(node: ArgumentListSyntax): void { - visitNodeOrToken(this, node.typeArgumentList); + this.visitOptionalNode(node.typeArgumentList); this.visitToken(node.openParenToken); this.visitSeparatedList(node.arguments); this.visitToken(node.closeParenToken); @@ -517,12 +529,12 @@ module TypeScript { public visitEqualsValueClause(node: EqualsValueClauseSyntax): void { this.visitToken(node.equalsToken); - visitNodeOrToken(this, node.value); + node.value.accept(this); } public visitCaseSwitchClause(node: CaseSwitchClauseSyntax): void { this.visitToken(node.caseKeyword); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); this.visitToken(node.colonToken); this.visitList(node.statements); } @@ -535,43 +547,43 @@ module TypeScript { public visitElseClause(node: ElseClauseSyntax): void { this.visitToken(node.elseKeyword); - visitNodeOrToken(this, node.statement); + node.statement.accept(this); } public visitCatchClause(node: CatchClauseSyntax): void { this.visitToken(node.catchKeyword); this.visitToken(node.openParenToken); this.visitToken(node.identifier); - visitNodeOrToken(this, node.typeAnnotation); + this.visitOptionalNode(node.typeAnnotation); this.visitToken(node.closeParenToken); - visitNodeOrToken(this, node.block); + node.block.accept(this); } public visitFinallyClause(node: FinallyClauseSyntax): void { this.visitToken(node.finallyKeyword); - visitNodeOrToken(this, node.block); + node.block.accept(this); } public visitTypeParameter(node: TypeParameterSyntax): void { this.visitToken(node.identifier); - visitNodeOrToken(this, node.constraint); + this.visitOptionalNode(node.constraint); } public visitConstraint(node: ConstraintSyntax): void { this.visitToken(node.extendsKeyword); - visitNodeOrToken(this, node.typeOrExpression); + node.typeOrExpression.accept(this); } public visitSimplePropertyAssignment(node: SimplePropertyAssignmentSyntax): void { this.visitToken(node.propertyName); this.visitToken(node.colonToken); - visitNodeOrToken(this, node.expression); + node.expression.accept(this); } public visitFunctionPropertyAssignment(node: FunctionPropertyAssignmentSyntax): void { this.visitToken(node.propertyName); - visitNodeOrToken(this, node.callSignature); - visitNodeOrToken(this, node.block); + node.callSignature.accept(this); + node.block.accept(this); } public visitParameter(node: ParameterSyntax): void { @@ -579,18 +591,18 @@ module TypeScript { this.visitList(node.modifiers); this.visitToken(node.identifier); this.visitOptionalToken(node.questionToken); - visitNodeOrToken(this, node.typeAnnotation); - visitNodeOrToken(this, node.equalsValueClause); + this.visitOptionalNode(node.typeAnnotation); + this.visitOptionalNode(node.equalsValueClause); } public visitEnumElement(node: EnumElementSyntax): void { this.visitToken(node.propertyName); - visitNodeOrToken(this, node.equalsValueClause); + this.visitOptionalNode(node.equalsValueClause); } public visitTypeAnnotation(node: TypeAnnotationSyntax): void { this.visitToken(node.colonToken); - visitNodeOrToken(this, node.type); + node.type.accept(this); } public visitExternalModuleReference(node: ExternalModuleReferenceSyntax): void { @@ -601,7 +613,7 @@ module TypeScript { } public visitModuleNameModuleReference(node: ModuleNameModuleReferenceSyntax): void { - visitNodeOrToken(this, node.moduleName); + node.moduleName.accept(this); } } } \ No newline at end of file diff --git a/src/services/syntax/testUtilities.ts b/src/services/syntax/testUtilities.ts index 6144c6cffb7..18853a64464 100644 --- a/src/services/syntax/testUtilities.ts +++ b/src/services/syntax/testUtilities.ts @@ -13,11 +13,11 @@ module TypeScript { Debug.assert(node2.kind() === TypeScript.SyntaxKind.SourceUnit || node2.parent); if (node1.kind() !== node2.kind()) { return false; } - if (childCount(node1) !== childCount(node2)) { return false; } + if (node1.childCount() !== node2.childCount()) { return false; } - for (var i = 0, n = childCount(node1); i < n; i++) { - var element1 = childAt(node1, i); - var element2 = childAt(node2, i); + for (var i = 0, n = node1.childCount(); i < n; i++) { + var element1 = node1.childAt(i); + var element2 = node2.childAt(i); if (checkParents) { assertParent(node1, element1); @@ -105,13 +105,13 @@ module TypeScript { Debug.assert(TypeScript.isShared(list1) || list1.parent); Debug.assert(TypeScript.isShared(list2) || list2.parent); - if (childCount(list1) !== childCount(list2)) { + if (list1.childCount() !== list2.childCount()) { return false; } - for (var i = 0, n = childCount(list1); i < n; i++) { - var child1 = childAt(list1, i); - var child2 = childAt(list2, i); + for (var i = 0, n = list1.childCount(); i < n; i++) { + var child1 = list1.childAt(i); + var child2 = list2.childAt(i); if (checkParents) { assertParent(list1, child1); @@ -130,13 +130,13 @@ module TypeScript { Debug.assert(TypeScript.isShared(list1) || list1.parent); Debug.assert(TypeScript.isShared(list2) || list2.parent); - if (childCount(list1) !== childCount(list2)) { + if (list1.childCount() !== list2.childCount()) { return false; } - for (var i = 0, n = childCount(list1); i < n; i++) { - var element1 = childAt(list1, i); - var element2 = childAt(list2, i); + for (var i = 0, n = list1.childCount(); i < n; i++) { + var element1 = list1.childAt(i); + var element2 = list2.childAt(i); if (checkParents) { assertParent(list1, element1);