Type declaration parsing; Future feature references

This commit is contained in:
dcodeIO
2017-12-19 17:49:15 +01:00
parent aa563a9a5a
commit 9632777842
18 changed files with 364 additions and 172 deletions

View File

@ -37,6 +37,7 @@ import {
Modifier,
NamespaceDeclaration,
Statement,
TypeDeclaration,
TypeParameter,
VariableLikeDeclarationStatement,
VariableDeclaration,
@ -148,6 +149,10 @@ export class Program extends DiagnosticEmitter {
this.initializeNamespace(<NamespaceDeclaration>statement);
break;
case NodeKind.TYPEDECLARATION:
this.initializeType(<TypeDeclaration>statement);
break;
case NodeKind.VARIABLE:
this.initializeVariables(<VariableStatement>statement);
break;
@ -641,6 +646,10 @@ export class Program extends DiagnosticEmitter {
this.initializeNamespace(<NamespaceDeclaration>members[i], namespace);
break;
case NodeKind.TYPEDECLARATION:
this.initializeType(<TypeDeclaration>members[i], namespace);
break;
case NodeKind.VARIABLE:
this.initializeVariables(<VariableStatement>members[i], namespace);
break;
@ -651,6 +660,17 @@ export class Program extends DiagnosticEmitter {
}
}
private initializeType(declaration: TypeDeclaration, namespace: Element | null = null): void {
// type aliases are program globals
const name: string = declaration.name.name;
if (this.types.has(name)) {
this.error(DiagnosticCode.Duplicate_identifier_0, declaration.name.range, name);
return;
}
// TODO: queue, then resolve
throw new Error("not implemented");
}
private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {
const declarations: VariableDeclaration[] = statement.declarations;
for (let i: i32 = 0, k: i32 = declarations.length; i < k; ++i) {