Add flag to ignore no-main-error

This commit is contained in:
Sofia 2025-07-21 16:47:51 +03:00
parent 7c7dde03f9
commit a1507e14ca
2 changed files with 17 additions and 9 deletions

View File

@ -121,7 +121,10 @@ pub fn perform_all_passes<'map>(
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
println!("{}", &context); println!("{}", &context);
let state = context.pass(&mut LinkerPass { module_map })?; let state = context.pass(&mut LinkerPass {
module_map,
ignore_no_main: true,
})?;
#[cfg(debug_assertions)] #[cfg(debug_assertions)]
println!("{:-^100}", "LINKER OUTPUT"); println!("{:-^100}", "LINKER OUTPUT");

View File

@ -63,6 +63,7 @@ pub fn compile_std(
/// MIR. /// MIR.
pub struct LinkerPass<'map> { pub struct LinkerPass<'map> {
pub module_map: &'map mut ModuleMap, pub module_map: &'map mut ModuleMap,
pub ignore_no_main: bool,
} }
type LinkerPassState<'st, 'sc> = PassState<'st, 'sc, (), ErrorKind>; type LinkerPassState<'st, 'sc> = PassState<'st, 'sc, (), ErrorKind>;
@ -80,14 +81,18 @@ impl<'map> Pass for LinkerPass<'map> {
state.note_errors(&vec![ErrorKind::MultipleMainsAtStart], Metadata::default()); state.note_errors(&vec![ErrorKind::MultipleMainsAtStart], Metadata::default());
return Ok(()); return Ok(());
} }
let Some(main) = mains.first() else { if let Some(main) = mains.first() {
state.note_errors(&vec![ErrorKind::NoMainDefined], Metadata::default()); if let None = main.functions.iter().find(|f| f.name == "main") {
return Ok(()); if !self.ignore_no_main {
}; state.note_errors(&vec![ErrorKind::NoMainFunction], Metadata::default());
return Ok(());
let Some(_) = main.functions.iter().find(|f| f.name == "main") else { }
state.note_errors(&vec![ErrorKind::NoMainFunction], Metadata::default()); };
return Ok(()); } else {
if !self.ignore_no_main {
state.note_errors(&vec![ErrorKind::NoMainDefined], Metadata::default());
return Ok(());
}
}; };
let mut modules = HashMap::<String, Rc<RefCell<_>>>::new(); let mut modules = HashMap::<String, Rc<RefCell<_>>>::new();