Add an IAccessorSyntax interface.

This commit is contained in:
Cyrus Najmabadi
2014-11-04 21:09:50 -08:00
parent ba2bdc4124
commit 3753058874
6 changed files with 18 additions and 62 deletions

View File

@@ -1510,7 +1510,7 @@ var definitions = [
{
name: 'GetAccessorSyntax',
baseType: 'ISyntaxNode',
interfaces: ['IMemberDeclarationSyntax', 'IPropertyAssignmentSyntax'],
interfaces: ['IAccessorSyntax'],
children: [
{ name: 'modifiers', isList: true, elementType: 'ISyntaxToken', isTypeScriptSpecific: true },
{ name: 'getKeyword', isToken: true, excludeFromAST: true },
@@ -1522,7 +1522,7 @@ var definitions = [
{
name: 'SetAccessorSyntax',
baseType: 'ISyntaxNode',
interfaces: ['IMemberDeclarationSyntax', 'IPropertyAssignmentSyntax'],
interfaces: ['IAccessorSyntax'],
children: [
{ name: 'modifiers', isList: true, elementType: 'ISyntaxToken', isTypeScriptSpecific: true },
{ name: 'setKeyword', isToken: true, excludeFromAST: true },
@@ -1907,43 +1907,6 @@ function getSafeName(child) {
}
return child.name;
}
function generateBrands(definition, accessibility) {
var properties = "";
var types = [];
if (definition.interfaces) {
var ifaces = definition.interfaces.slice(0);
var i;
for (i = 0; i < ifaces.length; i++) {
var current = ifaces[i];
while (current !== undefined) {
if (!TypeScript.ArrayUtilities.contains(ifaces, current)) {
ifaces.push(current);
}
current = interfaces[current];
}
}
for (i = 0; i < ifaces.length; i++) {
var type = ifaces[i];
type = getStringWithoutSuffix(type);
if (isInterface(type)) {
type = "_" + type.substr(1, 1).toLowerCase() + type.substr(2) + "Brand";
}
types.push(type);
}
}
types.push("_syntaxNodeOrTokenBrand");
if (types.length > 0) {
properties += " ";
for (var i = 0; i < types.length; i++) {
if (accessibility) {
properties += " public ";
}
properties += types[i] + ": any;";
}
properties += "\r\n";
}
return properties;
}
function generateConstructorFunction(definition) {
var result = " export var " + definition.name + ": " + getNameWithoutSuffix(definition) + "Constructor = <any>function(data: number";
for (var i = 0; i < definition.children.length; i++) {
@@ -2246,32 +2209,16 @@ function generateVisitor() {
result += "\r\n}";
return result;
}
function generateServicesUtilities() {
var result = "";
result += "module TypeScript {\r\n";
result += " export function childCount(element: ISyntaxElement): number {\r\n";
result += " if (isList(element)) { return (<ISyntaxNodeOrToken[]>element).length; }\r\n";
result += " return (<ISyntaxNodeOrToken>element).childCount;\r\n";
result += " }\r\n\r\n";
result += " export function childAt(element: ISyntaxElement, index: number): ISyntaxElement {\r\n";
result += " if (isList(element)) { return (<ISyntaxNodeOrToken[]>element)[index]; }\r\n";
result += " return (<ISyntaxNodeOrToken>element).childAt(index);\r\n";
result += " }\r\n";
result += "}";
return result;
}
var syntaxNodesConcrete = generateNodes();
var syntaxInterfaces = generateSyntaxInterfaces();
var walker = generateWalker();
var scannerUtilities = generateScannerUtilities();
var visitor = generateVisitor();
var servicesUtilities = generateServicesUtilities();
var utilities = generateUtilities();
sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxNodes.concrete.generated.ts", syntaxNodesConcrete, false);
sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\syntaxInterfaces.generated.ts", syntaxInterfaces, 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\\syntaxUtilities.generated.ts", servicesUtilities, false);
sys.writeFile(sys.getCurrentDirectory() + "\\src\\services\\syntax\\utilities.generated.ts", utilities, false);
//# sourceMappingURL=file:///C:/VSPro_1/src/typescript/public_cyrusn/src/services/syntax/SyntaxGenerator.js.map

File diff suppressed because one or more lines are too long

View File

@@ -1134,7 +1134,7 @@ module TypeScript.Parser {
return isPropertyName(peekToken(modifierCount + 1), inErrorRecovery);
}
function parseAccessor(checkForStrictMode: boolean): IPropertyAssignmentSyntax {
function parseAccessor(checkForStrictMode: boolean): IAccessorSyntax {
var modifiers = parseModifiers();
var _currenToken = currentToken();
var tokenKind = _currenToken.kind;

View File

@@ -450,10 +450,19 @@ module TypeScript {
_memberDeclarationBrand: any;
}
export interface IPropertyAssignmentSyntax extends IClassElementSyntax {
export interface IPropertyAssignmentSyntax extends ISyntaxNode {
_propertyAssignmentBrand: any;
}
export interface IAccessorSyntax extends IPropertyAssignmentSyntax, IMemberDeclarationSyntax {
_accessorBrand: any;
modifiers: ISyntaxToken[];
propertyName: ISyntaxToken;
callSignature: CallSignatureSyntax;
block: BlockSyntax;
}
export interface ISwitchClauseSyntax extends ISyntaxNode {
_switchClauseBrand: any;
statements: IStatementSyntax[];

View File

@@ -660,7 +660,7 @@ var definitions:ITypeDefinition[] = [
<any>{
name: 'GetAccessorSyntax',
baseType: 'ISyntaxNode',
interfaces: ['IMemberDeclarationSyntax', 'IPropertyAssignmentSyntax' ],
interfaces: ['IAccessorSyntax' ],
children: [
<any>{ name: 'modifiers', isList: true, elementType: 'ISyntaxToken', isTypeScriptSpecific: true },
<any>{ name: 'getKeyword', isToken: true, excludeFromAST: true },
@@ -672,7 +672,7 @@ var definitions:ITypeDefinition[] = [
<any>{
name: 'SetAccessorSyntax',
baseType: 'ISyntaxNode',
interfaces: ['IMemberDeclarationSyntax', 'IPropertyAssignmentSyntax'],
interfaces: ['IAccessorSyntax'],
children: [
<any>{ name: 'modifiers', isList: true, elementType: 'ISyntaxToken', isTypeScriptSpecific: true },
<any>{ name: 'setKeyword', isToken: true, excludeFromAST: true },

View File

@@ -182,7 +182,7 @@ module TypeScript {
}
export interface IndexMemberDeclarationConstructor { new (data: number, modifiers: ISyntaxToken[], indexSignature: IndexSignatureSyntax, semicolonToken: ISyntaxToken): IndexMemberDeclarationSyntax }
export interface GetAccessorSyntax extends ISyntaxNode, IMemberDeclarationSyntax, IPropertyAssignmentSyntax {
export interface GetAccessorSyntax extends ISyntaxNode, IAccessorSyntax {
modifiers: ISyntaxToken[];
getKeyword: ISyntaxToken;
propertyName: ISyntaxToken;
@@ -191,7 +191,7 @@ module TypeScript {
}
export interface GetAccessorConstructor { new (data: number, modifiers: ISyntaxToken[], getKeyword: ISyntaxToken, propertyName: ISyntaxToken, callSignature: CallSignatureSyntax, block: BlockSyntax): GetAccessorSyntax }
export interface SetAccessorSyntax extends ISyntaxNode, IMemberDeclarationSyntax, IPropertyAssignmentSyntax {
export interface SetAccessorSyntax extends ISyntaxNode, IAccessorSyntax {
modifiers: ISyntaxToken[];
setKeyword: ISyntaxToken;
propertyName: ISyntaxToken;