mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
Merge branch 'main' into builtin-task
This commit is contained in:
commit
cd488300fd
24 changed files with 964 additions and 953 deletions
|
@ -1560,15 +1560,7 @@ pub fn load_single_threaded<'a>(
|
|||
|
||||
// now we just manually interleave stepping the state "thread" and the worker "thread"
|
||||
loop {
|
||||
match state_thread_step(
|
||||
arena,
|
||||
state,
|
||||
&src_dir,
|
||||
worker_listeners,
|
||||
&injector,
|
||||
&msg_tx,
|
||||
&msg_rx,
|
||||
) {
|
||||
match state_thread_step(arena, state, worker_listeners, &injector, &msg_tx, &msg_rx) {
|
||||
Ok(ControlFlow::Break(done)) => return Ok(done),
|
||||
Ok(ControlFlow::Continue(new_state)) => {
|
||||
state = new_state;
|
||||
|
@ -1595,7 +1587,6 @@ pub fn load_single_threaded<'a>(
|
|||
fn state_thread_step<'a>(
|
||||
arena: &'a Bump,
|
||||
state: State<'a>,
|
||||
src_dir: &Path,
|
||||
worker_listeners: &'a [Sender<WorkerMsg>],
|
||||
injector: &Injector<BuildTask<'a>>,
|
||||
msg_tx: &crossbeam::channel::Sender<Msg<'a>>,
|
||||
|
@ -1704,7 +1695,6 @@ fn state_thread_step<'a>(
|
|||
|
||||
let res_state = update(
|
||||
state,
|
||||
src_dir,
|
||||
msg,
|
||||
msg_tx.clone(),
|
||||
injector,
|
||||
|
@ -2050,15 +2040,8 @@ fn load_multi_threaded<'a>(
|
|||
// The root module will have already queued up messages to process,
|
||||
// and processing those messages will in turn queue up more messages.
|
||||
loop {
|
||||
match state_thread_step(
|
||||
arena,
|
||||
state,
|
||||
&src_dir,
|
||||
worker_listeners,
|
||||
&injector,
|
||||
&msg_tx,
|
||||
&msg_rx,
|
||||
) {
|
||||
match state_thread_step(arena, state, worker_listeners, &injector, &msg_tx, &msg_rx)
|
||||
{
|
||||
Ok(ControlFlow::Break(load_result)) => {
|
||||
shut_down_worker_threads!();
|
||||
|
||||
|
@ -2174,7 +2157,6 @@ fn extend_module_with_builtin_import(module: &mut ParsedModule, module_id: Modul
|
|||
|
||||
fn update<'a>(
|
||||
mut state: State<'a>,
|
||||
src_dir: &Path,
|
||||
msg: Msg<'a>,
|
||||
msg_tx: MsgSender<'a>,
|
||||
injector: &Injector<BuildTask<'a>>,
|
||||
|
@ -2203,11 +2185,14 @@ fn update<'a>(
|
|||
if !header.packages.is_empty() {
|
||||
let mut shorthands = state.arc_shorthands.lock();
|
||||
|
||||
let mut parent_dir = header.module_path.clone();
|
||||
parent_dir.pop();
|
||||
|
||||
register_package_shorthands(
|
||||
&mut shorthands,
|
||||
&header.packages,
|
||||
&header.module_path,
|
||||
src_dir,
|
||||
&parent_dir,
|
||||
&state.cache_dir,
|
||||
)?;
|
||||
}
|
||||
|
@ -3348,6 +3333,7 @@ fn load_package_from_disk<'a>(
|
|||
arena: &'a Bump,
|
||||
filename: &Path,
|
||||
shorthand: &'a str,
|
||||
roc_cache_dir: RocCacheDir,
|
||||
app_module_id: Option<ModuleId>,
|
||||
module_ids: Arc<Mutex<PackageModuleIds<'a>>>,
|
||||
ident_ids_by_module: SharedIdentIdsByModule,
|
||||
|
@ -3406,20 +3392,41 @@ fn load_package_from_disk<'a>(
|
|||
},
|
||||
parser_state,
|
||||
)) => {
|
||||
let (_, _, package_module_msg) = build_package_header(
|
||||
let mut parent_dir = filename.to_path_buf();
|
||||
parent_dir.pop();
|
||||
|
||||
let packages = unspace(arena, header.packages.value.items);
|
||||
|
||||
let (_, _, header) = build_package_header(
|
||||
arena,
|
||||
Some(shorthand),
|
||||
false, // cannot be the root if loaded as a package
|
||||
filename.to_path_buf(),
|
||||
parser_state,
|
||||
module_ids,
|
||||
ident_ids_by_module,
|
||||
module_ids.clone(),
|
||||
ident_ids_by_module.clone(),
|
||||
&header,
|
||||
comments,
|
||||
pkg_module_timing,
|
||||
)?;
|
||||
|
||||
Ok(Msg::Header(package_module_msg))
|
||||
let filename = header.module_path.clone();
|
||||
let mut messages = Vec::with_capacity(packages.len() + 1);
|
||||
messages.push(Msg::Header(header));
|
||||
|
||||
load_packages(
|
||||
packages,
|
||||
&mut messages,
|
||||
roc_cache_dir,
|
||||
parent_dir,
|
||||
arena,
|
||||
None,
|
||||
module_ids,
|
||||
ident_ids_by_module,
|
||||
filename,
|
||||
);
|
||||
|
||||
Ok(Msg::Many(messages))
|
||||
}
|
||||
Ok((
|
||||
ast::Module {
|
||||
|
@ -3428,6 +3435,11 @@ fn load_package_from_disk<'a>(
|
|||
},
|
||||
parser_state,
|
||||
)) => {
|
||||
let mut parent_dir = filename.to_path_buf();
|
||||
parent_dir.pop();
|
||||
|
||||
let packages = unspace(arena, header.packages.item.items);
|
||||
|
||||
let exposes_ids = get_exposes_ids(
|
||||
header.exposes.item.items,
|
||||
arena,
|
||||
|
@ -3436,21 +3448,37 @@ fn load_package_from_disk<'a>(
|
|||
);
|
||||
|
||||
// make a `platform` module that ultimately exposes `main` to the host
|
||||
let (_, _, platform_module_msg) = build_platform_header(
|
||||
let (_, _, header) = build_platform_header(
|
||||
arena,
|
||||
Some(shorthand),
|
||||
false, // cannot be the root if loaded as a package
|
||||
app_module_id,
|
||||
filename.to_path_buf(),
|
||||
parser_state,
|
||||
module_ids,
|
||||
module_ids.clone(),
|
||||
exposes_ids.into_bump_slice(),
|
||||
&header,
|
||||
comments,
|
||||
pkg_module_timing,
|
||||
)?;
|
||||
|
||||
Ok(Msg::Header(platform_module_msg))
|
||||
let filename = header.module_path.clone();
|
||||
let mut messages = Vec::with_capacity(packages.len() + 1);
|
||||
messages.push(Msg::Header(header));
|
||||
|
||||
load_packages(
|
||||
packages,
|
||||
&mut messages,
|
||||
roc_cache_dir,
|
||||
parent_dir,
|
||||
arena,
|
||||
None,
|
||||
module_ids,
|
||||
ident_ids_by_module,
|
||||
filename,
|
||||
);
|
||||
|
||||
Ok(Msg::Many(messages))
|
||||
}
|
||||
Err(fail) => Err(LoadingProblem::ParsingFailed(
|
||||
fail.map_problem(SyntaxError::Header)
|
||||
|
@ -4090,6 +4118,7 @@ fn load_packages<'a>(
|
|||
arena,
|
||||
&root_module_path,
|
||||
shorthand,
|
||||
roc_cache_dir,
|
||||
app_module_id,
|
||||
module_ids.clone(),
|
||||
ident_ids_by_module.clone(),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue