Moved AST serialization to extra (not ultimately needed by asc)

This commit is contained in:
dcodeIO
2018-01-15 19:00:18 +01:00
parent f2ba4b4a76
commit d1fed692f6
19 changed files with 1301 additions and 1008 deletions

1
src/README.md Normal file
View File

@ -0,0 +1 @@
Portable compiler sources that compile to both JavaScript using `tsc` and, eventually, WebAssembly using `asc`.

File diff suppressed because it is too large Load Diff

View File

@ -275,17 +275,17 @@ export class Compiler extends DiagnosticEmitter {
var statement = source.statements[i];
switch (statement.kind) {
case NodeKind.CLASS:
case NodeKind.CLASSDECLARATION:
if ((noTreeShaking || source.isEntry && hasModifier(ModifierKind.EXPORT, (<ClassDeclaration>statement).modifiers)) && !(<ClassDeclaration>statement).typeParameters.length)
this.compileClassDeclaration(<ClassDeclaration>statement, []);
break;
case NodeKind.ENUM:
case NodeKind.ENUMDECLARATION:
if (noTreeShaking || source.isEntry && hasModifier(ModifierKind.EXPORT, (<EnumDeclaration>statement).modifiers))
this.compileEnumDeclaration(<EnumDeclaration>statement);
break;
case NodeKind.FUNCTION:
case NodeKind.FUNCTIONDECLARATION:
if ((noTreeShaking || source.isEntry && hasModifier(ModifierKind.EXPORT, (<FunctionDeclaration>statement).modifiers)) && !(<FunctionDeclaration>statement).typeParameters.length)
this.compileFunctionDeclaration(<FunctionDeclaration>statement, []);
break;
@ -294,7 +294,7 @@ export class Compiler extends DiagnosticEmitter {
this.compileSourceByPath((<ImportStatement>statement).normalizedPath, (<ImportStatement>statement).path);
break;
case NodeKind.NAMESPACE:
case NodeKind.NAMESPACEDECLARATION:
if (noTreeShaking || source.isEntry && hasModifier(ModifierKind.EXPORT, (<NamespaceDeclaration>statement).modifiers))
this.compileNamespaceDeclaration(<NamespaceDeclaration>statement);
break;
@ -608,27 +608,27 @@ export class Compiler extends DiagnosticEmitter {
var member = members[i];
switch (member.kind) {
case NodeKind.CLASS:
case NodeKind.CLASSDECLARATION:
if ((noTreeShaking || hasModifier(ModifierKind.EXPORT, (<ClassDeclaration>member).modifiers)) && !(<ClassDeclaration>member).typeParameters.length)
this.compileClassDeclaration(<ClassDeclaration>member, []);
break;
case NodeKind.INTERFACE:
case NodeKind.INTERFACEDECLARATION:
if ((noTreeShaking || hasModifier(ModifierKind.EXPORT, (<InterfaceDeclaration>member).modifiers)) && !(<InterfaceDeclaration>member).typeParameters.length)
this.compileInterfaceDeclaration(<InterfaceDeclaration>member, []);
break;
case NodeKind.ENUM:
case NodeKind.ENUMDECLARATION:
if (noTreeShaking || hasModifier(ModifierKind.EXPORT, (<EnumDeclaration>member).modifiers))
this.compileEnumDeclaration(<EnumDeclaration>member);
break;
case NodeKind.FUNCTION:
case NodeKind.FUNCTIONDECLARATION:
if ((noTreeShaking || hasModifier(ModifierKind.EXPORT, (<FunctionDeclaration>member).modifiers)) && !(<FunctionDeclaration>member).typeParameters.length)
this.compileFunctionDeclaration(<FunctionDeclaration>member, []);
break;
case NodeKind.NAMESPACE:
case NodeKind.NAMESPACEDECLARATION:
if (noTreeShaking || hasModifier(ModifierKind.EXPORT, (<NamespaceDeclaration>member).modifiers))
this.compileNamespaceDeclaration(<NamespaceDeclaration>member);
break;
@ -3059,12 +3059,12 @@ function isModuleExport(element: Element, declaration: DeclarationStatement): bo
var parentNode = declaration.parent;
if (!parentNode)
return false;
if (declaration.range.source.isEntry && parentNode.kind != NodeKind.NAMESPACE)
if (declaration.range.source.isEntry && parentNode.kind != NodeKind.NAMESPACEDECLARATION)
return true;
if (parentNode.kind == NodeKind.VARIABLE)
if (!(parentNode = parentNode.parent))
return false;
if (parentNode.kind != NodeKind.NAMESPACE && parentNode.kind != NodeKind.CLASS)
if (parentNode.kind != NodeKind.NAMESPACEDECLARATION && parentNode.kind != NodeKind.CLASSDECLARATION)
return false;
var parent = element.program.elements.get((<DeclarationStatement>parentNode).internalName);
if (!parent)

1
src/extra/README.md Normal file
View File

@ -0,0 +1 @@
Extra components that are not ultimately required in a standalone compiler.

1213
src/extra/ast.ts Normal file

File diff suppressed because it is too large Load Diff

1
src/glue/README.md Normal file
View File

@ -0,0 +1 @@
Environment specific glue code.

View File

@ -156,11 +156,11 @@ export class Program extends DiagnosticEmitter {
var statement = statements[j];
switch (statement.kind) {
case NodeKind.CLASS:
case NodeKind.CLASSDECLARATION:
this.initializeClass(<ClassDeclaration>statement, queuedDerivedClasses);
break;
case NodeKind.ENUM:
case NodeKind.ENUMDECLARATION:
this.initializeEnum(<EnumDeclaration>statement);
break;
@ -168,7 +168,7 @@ export class Program extends DiagnosticEmitter {
this.initializeExports(<ExportStatement>statement, queuedExports);
break;
case NodeKind.FUNCTION:
case NodeKind.FUNCTIONDECLARATION:
this.initializeFunction(<FunctionDeclaration>statement);
break;
@ -176,11 +176,11 @@ export class Program extends DiagnosticEmitter {
this.initializeImports(<ImportStatement>statement, queuedExports, queuedImports);
break;
case NodeKind.INTERFACE:
case NodeKind.INTERFACEDECLARATION:
this.initializeInterface(<InterfaceDeclaration>statement);
break;
case NodeKind.NAMESPACE:
case NodeKind.NAMESPACEDECLARATION:
this.initializeNamespace(<NamespaceDeclaration>statement, queuedDerivedClasses, null);
break;
@ -327,11 +327,11 @@ export class Program extends DiagnosticEmitter {
var memberDeclaration = memberDeclarations[i];
switch (memberDeclaration.kind) {
case NodeKind.FIELD:
case NodeKind.FIELDDECLARATION:
this.initializeField(<FieldDeclaration>memberDeclaration, prototype);
break;
case NodeKind.METHOD:
case NodeKind.METHODDECLARATION:
var isGetter: bool;
if ((isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers)) || hasModifier(ModifierKind.SET, memberDeclaration.modifiers))
this.initializeAccessor(<MethodDeclaration>memberDeclaration, prototype, isGetter);
@ -768,11 +768,11 @@ export class Program extends DiagnosticEmitter {
var memberDeclaration = memberDeclarations[i];
switch (memberDeclaration.kind) {
case NodeKind.FIELD:
case NodeKind.FIELDDECLARATION:
this.initializeField(<FieldDeclaration>memberDeclaration, prototype);
break;
case NodeKind.METHOD:
case NodeKind.METHODDECLARATION:
var isGetter: bool;
if ((isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers)) || hasModifier(ModifierKind.SET, memberDeclaration.modifiers))
this.initializeAccessor(<MethodDeclaration>memberDeclaration, prototype, isGetter);
@ -818,23 +818,23 @@ export class Program extends DiagnosticEmitter {
for (var i = 0, k = members.length; i < k; ++i) {
switch (members[i].kind) {
case NodeKind.CLASS:
case NodeKind.CLASSDECLARATION:
this.initializeClass(<ClassDeclaration>members[i], queuedExtendingClasses, namespace);
break;
case NodeKind.ENUM:
case NodeKind.ENUMDECLARATION:
this.initializeEnum(<EnumDeclaration>members[i], namespace);
break;
case NodeKind.FUNCTION:
case NodeKind.FUNCTIONDECLARATION:
this.initializeFunction(<FunctionDeclaration>members[i], namespace);
break;
case NodeKind.INTERFACE:
case NodeKind.INTERFACEDECLARATION:
this.initializeInterface(<InterfaceDeclaration>members[i], namespace);
break;
case NodeKind.NAMESPACE:
case NodeKind.NAMESPACEDECLARATION:
this.initializeNamespace(<NamespaceDeclaration>members[i], queuedExtendingClasses, namespace);
break;

View File

@ -249,60 +249,6 @@ export namespace Token {
}
}
export function operatorToString(token: Token): string {
switch (token) {
case Token.DELETE: return "delete";
case Token.IN: return "in";
case Token.INSTANCEOF: return "instanceof";
case Token.NEW: return "new";
case Token.TYPEOF: return "typeof";
case Token.VOID: return "void";
case Token.YIELD: return "yield";
case Token.DOT_DOT_DOT: return "...";
case Token.COMMA: return ",";
case Token.LESSTHAN: return "<";
case Token.GREATERTHAN: return ">";
case Token.LESSTHAN_EQUALS: return "<=";
case Token.GREATERTHAN_EQUALS: return ">=";
case Token.EQUALS_EQUALS: return "==";
case Token.EXCLAMATION_EQUALS: return "!=";
case Token.EQUALS_EQUALS_EQUALS: return "===";
case Token.EXCLAMATION_EQUALS_EQUALS: return "!==";
case Token.PLUS: return "+";
case Token.MINUS: return "-";
case Token.ASTERISK_ASTERISK: return "**";
case Token.ASTERISK: return "*";
case Token.SLASH: return "/";
case Token.PERCENT: return "%";
case Token.PLUS_PLUS: return "++";
case Token.MINUS_MINUS: return "--";
case Token.LESSTHAN_LESSTHAN: return "<<";
case Token.GREATERTHAN_GREATERTHAN: return ">>";
case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return ">>>";
case Token.AMPERSAND: return "&";
case Token.BAR: return "|";
case Token.CARET: return "^";
case Token.EXCLAMATION: return "!";
case Token.TILDE: return "~";
case Token.AMPERSAND_AMPERSAND: return "&&";
case Token.BAR_BAR: return "||";
case Token.EQUALS: return "=";
case Token.PLUS_EQUALS: return "+=";
case Token.MINUS_EQUALS: return "-=";
case Token.ASTERISK_EQUALS: return "*=";
case Token.ASTERISK_ASTERISK_EQUALS: return "**=";
case Token.SLASH_EQUALS: return "/=";
case Token.PERCENT_EQUALS: return "%=";
case Token.LESSTHAN_LESSTHAN_EQUALS: return "<<=";
case Token.GREATERTHAN_GREATERTHAN_EQUALS: return ">>=";
case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return ">>>=";
case Token.AMPERSAND_EQUALS: return "&=";
case Token.BAR_EQUALS: return "|=";
case Token.CARET_EQUALS: return "^=";
default: assert(false); return "";
}
}
export function isAlsoIdentifier(token: Token): bool {
switch (token) {
case Token.ABSTRACT:

View File

@ -6,5 +6,8 @@
},
"include": [
"./**/*.ts"
],
"exclude": [
"./extra/**"
]
}