erg_compiler 0.6.35

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

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

use erg_compiler::build_package::{PackageBuilder, PackageTypeChecker};
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();
    let stat = match cfg.mode {
        Lex => LexerRunner::run(cfg),
        Parse => ParserRunner::run(cfg),
        TypeCheck => PackageTypeChecker::run(cfg),
        FullCheck => PackageBuilder::run(cfg),
        Transpile => Transpiler::run(cfg),
        Compile | Execute => Compiler::run(cfg),
        Read => Deserializer::run(cfg),
        other => {
            println!("invalid mode: {other}");
            ExitStatus::ERR1
        }
    };
    std::process::exit(stat.code);
}

fn main() {
    exec_new_thread(run, "compiler");
}