diff --git a/compiler/load/src/file.rs b/compiler/load/src/file.rs index 8b0a26e76b..81cb0538d6 100644 --- a/compiler/load/src/file.rs +++ b/compiler/load/src/file.rs @@ -525,6 +525,7 @@ struct ParsedModule<'a> { #[derive(Debug)] enum Msg<'a> { + Many(Vec>), Header(ModuleHeader<'a>), Parsed(ParsedModule<'a>), CanonicalizedAndConstrained { @@ -1253,6 +1254,16 @@ fn update<'a>( use self::Msg::*; match msg { + Many(messages) => { + // enqueue all these message + for msg in messages { + msg_tx + .send(msg) + .map_err(|_| LoadingProblem::MsgChannelDied)?; + } + + Ok(state) + } Header(header) => { log!("loaded header for {:?}", header.module_id); let home = header.module_id; @@ -1868,16 +1879,34 @@ fn parse_header<'a>( ident_ids_by_module, module_timing, )), - Ok((ast::Module::App { header }, parse_state)) => Ok(send_header( - header.name, - filename, - header.provides.into_bump_slice(), - header.imports.into_bump_slice(), - parse_state, - module_ids, - ident_ids_by_module, - module_timing, - )), + Ok((ast::Module::App { header }, parse_state)) => { + let mut pkg_config_dir = filename.clone(); + pkg_config_dir.pop(); + + let (module_id, app_module_header_msg) = send_header( + header.name, + filename, + header.provides.into_bump_slice(), + header.imports.into_bump_slice(), + parse_state, + module_ids.clone(), + ident_ids_by_module.clone(), + module_timing, + ); + + let load_pkg_config_msg = load_pkg_config( + arena, + &pkg_config_dir, + module_ids, + ident_ids_by_module, + mode, + )?; + + Ok(( + module_id, + Msg::Many(vec![app_module_header_msg, load_pkg_config_msg]), + )) + } Ok((ast::Module::Platform { header }, _parse_state)) => fabricate_effects_module( arena, module_ids, diff --git a/examples/quicksort/platform/Pkg-Config.roc b/examples/quicksort/platform/Pkg-Config.roc index f0ce01ceb6..c8977f335d 100644 --- a/examples/quicksort/platform/Pkg-Config.roc +++ b/examples/quicksort/platform/Pkg-Config.roc @@ -2,4 +2,4 @@ platform roc/quicksort provides [] requires {} imports [] - effects {} + effects Effect {}