feat(main): Exit when error

This commit is contained in:
2026-06-13 10:06:36 +08:00
parent 6b13991e39
commit b0acadc601
+4
View File
@@ -13,6 +13,7 @@ use clap::Parser as ArgParser;
use crate::{ast::parser::Parser, ir::{cfg, generator::Generator}, lexer::lexer::Lexer, sema::analyzer::Analyzer};
use crate::backend::generator::Generator as ASMGerenerator;
/// Simple minic compiler built by Rust
#[derive(ArgParser, Debug)]
#[command(version, about, long_about = None)]
@@ -76,16 +77,19 @@ fn main() {
let (tokens, diagnostics) = lexer.finish();
if !diagnostics.is_empty() {
diagnostics.print(&format!("{}", source_path.display()), &full_text);
std::process::exit(1);
}
let mut parser = Parser::new(tokens, diagnostics);
let compile_unit = parser.parse();
if !parser.diagnostics.is_empty() {
parser.diagnostics.print(&format!("{}", source_path.display()), &full_text);
std::process::exit(1);
}
let mut analyzer = Analyzer::new();
let hir = analyzer.analyze(compile_unit);
if !analyzer.get_diagnostics().is_empty() {
analyzer.get_diagnostics().print(&format!("{}", source_path.display()), &full_text);
std::process::exit(1);
}
let mut generator = Generator::new(&analyzer);
let ir = cfg::optimize_ir(generator.emit(hir));