import { Checker } from "./checker.ts";
import { Reporter } from "./info.ts";
import { Lexer } from "./lexer.ts";
import { Lowerer } from "./lowerer.ts";
import { Parser } from "./parser.ts";
import { Resolver } from "./resolver.ts";

/// TODO: find a better place for this function
export async function compileWithDebug(path: string): Promise<number[]> {
    const text = await Deno.readTextFile(path);

    const reporter = new Reporter();

    const lexer = new Lexer(text, reporter);

    const parser = new Parser(lexer, reporter);
    const ast = parser.parse();

    new Resolver(reporter).resolve(ast);
    new Checker(reporter).check(ast);

    if (reporter.errorOccured()) {
        console.error("Errors occurred, stopping compilation.");
    }

    const lowerer = new Lowerer(lexer.currentPos());
    lowerer.lower(ast);
    lowerer.printProgram();
    const program = lowerer.finish();
    return program;
}