erg_compiler 0.6.3

Centimetre: the Erg compiler
Documentation
extern crate erg_common;
extern crate erg_compiler;
extern crate erg_parser;

use std::process;

use erg_common::config::{ErgConfig, ErgMode::*};
use erg_common::spawn::exec_new_thread;
use erg_common::traits::Runnable;

use erg_compiler::build_hir::HIRBuilder;
use erg_compiler::lower::ASTLowerer;
use erg_compiler::transpile::Transpiler;
use erg_compiler::ty::deserialize::Deserializer;
use erg_compiler::Compiler;

use erg_parser::lex::LexerRunner;
use erg_parser::ParserRunner;

fn run() {
    let cfg = ErgConfig::parse();
    match cfg.mode {
        Lex => {
            LexerRunner::run(cfg);
        }
        Parse => {
            ParserRunner::run(cfg);
        }
        TypeCheck => {
            ASTLowerer::run(cfg);
        }
        FullCheck => {
            HIRBuilder::run(cfg);
        }
        Transpile => {
            Transpiler::run(cfg);
        }
        Compile | Execute => {
            Compiler::run(cfg);
        }
        Read => {
            Deserializer::run(cfg);
        }
        other => {
            println!("invalid mode: {other}");
            process::exit(1);
        }
    }
}

fn main() {
    exec_new_thread(run);
}