Mark some AST members as optional

This commit is contained in:
joeduffy 2017-01-16 10:00:40 -08:00
parent 1948380eb2
commit 96c7f4fa52
3 changed files with 16 additions and 15 deletions

View file

@ -18,20 +18,18 @@ export interface Definition extends Node {
// A module contains members, including variables, functions, and/or classes.
export interface Module extends Definition {
kind: ModuleKind;
members: ModuleMembers;
kind: ModuleKind;
members?: ModuleMembers;
}
export const moduleKind = "Module";
export type ModuleKind = "Module";
export type Modules = { [token: string /*symbols.Token*/]: Definition };
export type Modules = { [token: string /*symbols.ModuleToken*/]: Module };
// A module member is a definition that belongs to a module.
export interface ModuleMember extends Definition {
access?: symbols.Accessibility;
}
export type ModuleMembers = { [token: string /*symbols.ModuleToken*/]: ModuleMember };
/* Classes */
export type ModuleMembers = { [token: string /*symbols.Token*/]: ModuleMember };
// An export definition re-exports a definition from another module, possibly with a different name.
export interface Export extends ModuleMember {
@ -41,6 +39,8 @@ export interface Export extends ModuleMember {
export const exportKind = "Export";
export type ExportKind = "Export";
/* Classes */
// A class can be constructed to create an object, and exports properties, methods, and has a number of attributes.
export interface Class extends ModuleMember {
kind: ClassKind;
@ -60,7 +60,7 @@ export interface ClassMember extends Definition {
access?: symbols.ClassMemberAccessibility;
static?: boolean;
}
export type ClassMembers = { [token: string /*symbols.TypeToken*/]: ClassMember };
export type ClassMembers = { [token: string /*symbols.Token*/]: ClassMember };
/* Variables */

View file

@ -47,8 +47,8 @@ export type StringLiteralKind = "StringLiteral";
// A array literal plus optional initialization.
export interface ArrayLiteral extends Literal {
kind: ArrayLiteralKind;
type: symbols.TypeToken; // the type of array to produce.
size?: Expression; // an optiojnal expression for the array size.
type?: symbols.TypeToken; // the type of array to produce.
size?: Expression; // an optional expression for the array size.
elements?: Expression[]; // an optional array of element expressions to store into the array.
}
export const arrayLiteralKind = "ArrayLiteral";
@ -57,7 +57,7 @@ export type ArrayLiteralKind = "ArrayLiteral";
// An object literal plus optional initialization.
export interface ObjectLiteral extends Literal {
kind: ObjectLiteralKind;
type: symbols.TypeToken; // the type of object to produce.
type?: symbols.TypeToken; // the type of object to produce.
properties?: ObjectLiteralProperty[]; // an optional array of property initializers.
}
export const objectLiteralKind = "ObjectLiteral";
@ -137,7 +137,7 @@ export interface UnaryOperatorExpression extends Expression {
kind: UnaryOperatorExpressionKind;
operator: UnaryOperator; // the operator type.
operand: Expression; // the right hand side operand.
postfix: boolean; // whether this is a postifx operator (only legal for UnaryPfixOperator).
postfix?: boolean; // whether this is a postifx operator (only legal for UnaryPfixOperator).
}
export const unaryOperatorExpressionKind = "UnaryOperatorExpression";
export type UnaryOperatorExpressionKind = "UnaryOperatorExpression";

View file

@ -38,9 +38,9 @@ export const tryCatchFinallyKind = "TryCatchFinally";
export type TryCatchFinallyKind = "TryCatchFinally";
export interface TryCatchBlock extends Node {
kind: TryCatchBlockKind;
exception: symbols.TypeToken;
block: Block;
kind: TryCatchBlockKind;
block: Block;
exception?: symbols.TypeToken;
}
export const tryCatchBlockKind = "TryCatchBlock";
export type TryCatchBlockKind = "TryCatchBlock";
@ -120,7 +120,8 @@ export type EmptyStatementKind = "EmptyStatement";
// Multiple statements in one (unlike a block, this doesn't introduce a new scope).
export interface MultiStatement extends Statement {
kind: MultiStatementKind;
kind: MultiStatementKind;
statements: Statement[];
}
export const multiStatementKind = "MultiStatement";
export type MultiStatementKind = "MultiStatement";