From a1507e14ca7ee932f975dc8b02b5b180a27c5bdb Mon Sep 17 00:00:00 2001 From: sofia Date: Mon, 21 Jul 2025 16:47:51 +0300 Subject: [PATCH] Add flag to ignore no-main-error --- reid/src/lib.rs | 5 ++++- reid/src/mir/linker.rs | 21 +++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/reid/src/lib.rs b/reid/src/lib.rs index ff482d4..eedc9d9 100644 --- a/reid/src/lib.rs +++ b/reid/src/lib.rs @@ -121,7 +121,10 @@ pub fn perform_all_passes<'map>( #[cfg(debug_assertions)] 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)] println!("{:-^100}", "LINKER OUTPUT"); diff --git a/reid/src/mir/linker.rs b/reid/src/mir/linker.rs index cb3a8c6..7407238 100644 --- a/reid/src/mir/linker.rs +++ b/reid/src/mir/linker.rs @@ -63,6 +63,7 @@ pub fn compile_std( /// MIR. pub struct LinkerPass<'map> { pub module_map: &'map mut ModuleMap, + pub ignore_no_main: bool, } 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()); return Ok(()); } - let Some(main) = mains.first() else { - state.note_errors(&vec![ErrorKind::NoMainDefined], 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(()); + if let Some(main) = mains.first() { + if let None = main.functions.iter().find(|f| f.name == "main") { + if !self.ignore_no_main { + 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::>>::new();