Integrate type checker in frontend

This commit is contained in:
Sam Vervaeck 2020-05-23 22:37:41 +02:00
parent 846536023d
commit e6c54052f1
2 changed files with 10 additions and 5 deletions

View file

@ -69,12 +69,19 @@ yargs
.string('target')
.describe('target', 'The target language to compile to.')
.default('target', 'JS')
.boolean('force')
.describe('force', 'Ignore as much errors as possible.')
.default('force', false)
, args => {
const sourceFiles = toArray(args.files as string[] | string).map(parseSourceFile);
const program = new Program(sourceFiles);
const frontend = new Frontend();
frontend.typeCheck(program);
if (frontend.diagnostics.hasErrors && !args.force) {
process.exit(1);
}
frontend.compile(program, args.target);
})

View file

@ -88,18 +88,16 @@ export class Frontend {
return new Package(projectDir);
}
public compile(program: Program, target: string) {
public typeCheck(program: Program) {
for (const sourceFile of program.getAllSourceFiles()) {
this.checker.registerSourceFile(sourceFile as BoltSourceFile);
}
for (const sourceFile of program.getAllSourceFiles()) {
this.checker.checkSourceFile(sourceFile as BoltSourceFile);
}
}
if (this.diagnostics.hasErrors) {
throw new Error(`Compilation failed because of type-checking errors.`);
}
public compile(program: Program, target: string) {
switch (target) {