package main

import (
	"fmt"
	"os"

	"github.com/marzeq/quokka/codegen"
	"github.com/marzeq/quokka/parser"
	"github.com/marzeq/quokka/tokeniser"
	"github.com/marzeq/quokka/typechecker"
)

func _check(err error) {
	if err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

func main() {
	t, err := tokeniser.NewTokeniserFromFile("test.qk")
	_check(err)

	toks, err := t.Tokenise()
	_check(err)

	p := parser.NewParser(toks)

	ast, err := p.Parse()
	_check(err)

	tc := typechecker.NewTypeChecker()
	ast, funcTable, err := tc.TypeCheck(ast)
	_check(err)

	cg := codegen.NewCodeGen(ast, funcTable)
	ir, err := cg.EmitIR()
	_check(err)

	os.Mkdir("build", 0755)
	os.WriteFile("build/test.ir", []byte(ir), 0644)
}