diff --git a/crates/ast/src/module.rs b/crates/ast/src/module.rs index b01c46f02c..0e95fea098 100644 --- a/crates/ast/src/module.rs +++ b/crates/ast/src/module.rs @@ -10,12 +10,15 @@ pub fn load_module(src_file: &Path, threading: Threading) -> LoadedModule { let loaded = roc_load::load_and_typecheck( &arena, src_file.to_path_buf(), - src_file.parent().unwrap_or_else(|| { - panic!( - "src_file {:?} did not have a parent directory but I need to have one.", - src_file - ) - }), + src_file + .parent() + .unwrap_or_else(|| { + panic!( + "src_file {:?} did not have a parent directory but I need to have one.", + src_file + ) + }) + .to_path_buf(), subs_by_module, TargetInfo::default_x86_64(), roc_reporting::report::RenderTarget::ColorTerminal, diff --git a/crates/bindgen/src/main.rs b/crates/bindgen/src/main.rs index 68336737a1..9a1c2d5b2a 100644 --- a/crates/bindgen/src/main.rs +++ b/crates/bindgen/src/main.rs @@ -56,7 +56,7 @@ pub fn main() { } }; - match load_types(input_path.clone(), &cwd, Threading::AllAvailable) { + match load_types(input_path.clone(), cwd, Threading::AllAvailable) { Ok(types_and_targets) => { let mut file = File::create(output_path.clone()).unwrap_or_else(|err| { eprintln!( diff --git a/crates/cli/src/build.rs b/crates/cli/src/build.rs index b4d03a5bee..5cf4a7106e 100644 --- a/crates/cli/src/build.rs +++ b/crates/cli/src/build.rs @@ -55,7 +55,7 @@ pub fn build_file<'a>( let loaded = roc_load::load_and_monomorphize( arena, app_module_path.clone(), - src_dir.as_path(), + src_dir, subs_by_module, target_info, // TODO: expose this from CLI? @@ -436,7 +436,7 @@ pub fn check_file( let mut loaded = roc_load::load_and_typecheck( arena, roc_file_path, - src_dir.as_path(), + src_dir, subs_by_module, target_info, // TODO: expose this from CLI? diff --git a/crates/cli/src/lib.rs b/crates/cli/src/lib.rs index 84cf30890d..3dd67c7c5a 100644 --- a/crates/cli/src/lib.rs +++ b/crates/cli/src/lib.rs @@ -367,7 +367,7 @@ pub fn test(matches: &ArgMatches, triple: Triple) -> io::Result { let loaded = roc_load::load_and_monomorphize( arena, path, - src_dir.as_path(), + src_dir, subs_by_module, target_info, // TODO: expose this from CLI? diff --git a/crates/compiler/load/build.rs b/crates/compiler/load/build.rs index 001be13ee3..924eaa8796 100644 --- a/crates/compiler/load/build.rs +++ b/crates/compiler/load/build.rs @@ -40,7 +40,7 @@ fn write_subs_for_module(module_id: ModuleId, filename: &str) { &arena, PathBuf::from(filename), source, - &src_dir, + src_dir, Default::default(), target_info, roc_reporting::report::RenderTarget::ColorTerminal, diff --git a/crates/compiler/load/src/lib.rs b/crates/compiler/load/src/lib.rs index 645299d7f6..cbc256b51e 100644 --- a/crates/compiler/load/src/lib.rs +++ b/crates/compiler/load/src/lib.rs @@ -7,7 +7,7 @@ use roc_module::symbol::{ModuleId, Symbol}; use roc_reporting::report::RenderTarget; use roc_target::TargetInfo; use roc_types::subs::{Subs, Variable}; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; pub use roc_load_internal::docs; pub use roc_load_internal::file::{ @@ -18,7 +18,6 @@ pub use roc_load_internal::file::{ fn load<'a>( arena: &'a Bump, load_start: LoadStart<'a>, - src_dir: &Path, exposed_types: ExposedByModule, goal_phase: Phase, target_info: TargetInfo, @@ -30,7 +29,6 @@ fn load<'a>( roc_load_internal::file::load( arena, load_start, - src_dir, exposed_types, goal_phase, target_info, @@ -44,7 +42,6 @@ fn load<'a>( pub fn load_single_threaded<'a>( arena: &'a Bump, load_start: LoadStart<'a>, - src_dir: &Path, exposed_types: ExposedByModule, goal_phase: Phase, target_info: TargetInfo, @@ -55,7 +52,6 @@ pub fn load_single_threaded<'a>( roc_load_internal::file::load_single_threaded( arena, load_start, - src_dir, exposed_types, goal_phase, target_info, @@ -69,7 +65,7 @@ pub fn load_and_monomorphize_from_str<'a>( arena: &'a Bump, filename: PathBuf, src: &'a str, - src_dir: &Path, + src_dir: PathBuf, exposed_types: ExposedByModule, target_info: TargetInfo, render: RenderTarget, @@ -77,12 +73,11 @@ pub fn load_and_monomorphize_from_str<'a>( ) -> Result, LoadingProblem<'a>> { use LoadResult::*; - let load_start = LoadStart::from_str(arena, filename, src)?; + let load_start = LoadStart::from_str(arena, filename, src, src_dir)?; match load( arena, load_start, - src_dir, exposed_types, Phase::MakeSpecializations, target_info, @@ -97,7 +92,7 @@ pub fn load_and_monomorphize_from_str<'a>( pub fn load_and_monomorphize<'a>( arena: &'a Bump, filename: PathBuf, - src_dir: &Path, + src_dir: PathBuf, exposed_types: ExposedByModule, target_info: TargetInfo, render: RenderTarget, @@ -105,12 +100,11 @@ pub fn load_and_monomorphize<'a>( ) -> Result, LoadingProblem<'a>> { use LoadResult::*; - let load_start = LoadStart::from_path(arena, filename, render)?; + let load_start = LoadStart::from_path(arena, src_dir, filename, render)?; match load( arena, load_start, - src_dir, exposed_types, Phase::MakeSpecializations, target_info, @@ -125,7 +119,7 @@ pub fn load_and_monomorphize<'a>( pub fn load_and_typecheck<'a>( arena: &'a Bump, filename: PathBuf, - src_dir: &Path, + src_dir: PathBuf, exposed_types: ExposedByModule, target_info: TargetInfo, render: RenderTarget, @@ -133,12 +127,11 @@ pub fn load_and_typecheck<'a>( ) -> Result> { use LoadResult::*; - let load_start = LoadStart::from_path(arena, filename, render)?; + let load_start = LoadStart::from_path(arena, src_dir, filename, render)?; match load( arena, load_start, - src_dir, exposed_types, Phase::SolveTypes, target_info, @@ -154,14 +147,14 @@ pub fn load_and_typecheck_str<'a>( arena: &'a Bump, filename: PathBuf, source: &'a str, - src_dir: &Path, + src_dir: PathBuf, exposed_types: ExposedByModule, target_info: TargetInfo, render: RenderTarget, ) -> Result> { use LoadResult::*; - let load_start = LoadStart::from_str(arena, filename, source)?; + let load_start = LoadStart::from_str(arena, filename, source, src_dir)?; // NOTE: this function is meant for tests, and so we use single-threaded // solving so we don't use too many threads per-test. That gives higher @@ -169,7 +162,6 @@ pub fn load_and_typecheck_str<'a>( match load_single_threaded( arena, load_start, - src_dir, exposed_types, Phase::SolveTypes, target_info, diff --git a/crates/compiler/load_internal/src/file.rs b/crates/compiler/load_internal/src/file.rs index 3a89dee23b..bef20d1b89 100644 --- a/crates/compiler/load_internal/src/file.rs +++ b/crates/compiler/load_internal/src/file.rs @@ -1067,7 +1067,7 @@ pub fn load_and_typecheck_str<'a>( arena: &'a Bump, filename: PathBuf, source: &'a str, - src_dir: &Path, + src_dir: PathBuf, exposed_types: ExposedByModule, target_info: TargetInfo, render: RenderTarget, @@ -1075,7 +1075,7 @@ pub fn load_and_typecheck_str<'a>( ) -> Result> { use LoadResult::*; - let load_start = LoadStart::from_str(arena, filename, source)?; + let load_start = LoadStart::from_str(arena, filename, source, src_dir)?; // this function is used specifically in the case // where we want to regenerate the cached data @@ -1084,7 +1084,6 @@ pub fn load_and_typecheck_str<'a>( match load( arena, load_start, - src_dir, exposed_types, Phase::SolveTypes, target_info, @@ -1108,11 +1107,13 @@ pub struct LoadStart<'a> { ident_ids_by_module: SharedIdentIdsByModule, root_id: ModuleId, root_msg: Msg<'a>, + src_dir: PathBuf, } impl<'a> LoadStart<'a> { pub fn from_path( arena: &'a Bump, + mut src_dir: PathBuf, filename: PathBuf, render: RenderTarget, ) -> Result> { @@ -1166,6 +1167,7 @@ impl<'a> LoadStart<'a> { Ok(LoadStart { arc_modules, ident_ids_by_module, + src_dir, root_id, root_msg, }) @@ -1175,6 +1177,7 @@ impl<'a> LoadStart<'a> { arena: &'a Bump, filename: PathBuf, src: &'a str, + src_dir: PathBuf, ) -> Result> { let arc_modules = Arc::new(Mutex::new(PackageModuleIds::default())); let root_exposed_ident_ids = IdentIds::exposed_builtins(0); @@ -1196,6 +1199,7 @@ impl<'a> LoadStart<'a> { Ok(LoadStart { arc_modules, + src_dir, ident_ids_by_module, root_id, root_msg, @@ -1269,7 +1273,6 @@ pub enum Threading { pub fn load<'a>( arena: &'a Bump, load_start: LoadStart<'a>, - src_dir: &Path, exposed_types: ExposedByModule, goal_phase: Phase, target_info: TargetInfo, @@ -1305,7 +1308,6 @@ pub fn load<'a>( Threads::Single => load_single_threaded( arena, load_start, - src_dir, exposed_types, goal_phase, target_info, @@ -1315,7 +1317,6 @@ pub fn load<'a>( Threads::Many(threads) => load_multi_threaded( arena, load_start, - src_dir, exposed_types, goal_phase, target_info, @@ -1331,7 +1332,6 @@ pub fn load<'a>( pub fn load_single_threaded<'a>( arena: &'a Bump, load_start: LoadStart<'a>, - src_dir: &Path, exposed_types: ExposedByModule, goal_phase: Phase, target_info: TargetInfo, @@ -1343,6 +1343,7 @@ pub fn load_single_threaded<'a>( ident_ids_by_module, root_id, root_msg, + src_dir, .. } = load_start; @@ -1394,7 +1395,7 @@ pub fn load_single_threaded<'a>( stealers, &worker_msg_rx, &msg_tx, - src_dir, + &src_dir, target_info, ); @@ -1532,7 +1533,6 @@ fn state_thread_step<'a>( fn load_multi_threaded<'a>( arena: &'a Bump, load_start: LoadStart<'a>, - src_dir: &Path, exposed_types: ExposedByModule, goal_phase: Phase, target_info: TargetInfo, @@ -1545,6 +1545,7 @@ fn load_multi_threaded<'a>( ident_ids_by_module, root_id, root_msg, + src_dir, .. } = load_start; @@ -1622,8 +1623,9 @@ fn load_multi_threaded<'a>( // We only want to move a *reference* to the main task queue's // injector in the thread, not the injector itself - // (since other threads need to reference it too). + // (since other threads need to reference it too). Same with src_dir. let injector = &injector; + let src_dir = &src_dir; // Record this thread's handle so the main thread can join it later. let res_join_handle = thread_scope diff --git a/crates/docs/src/lib.rs b/crates/docs/src/lib.rs index c3995c8bc3..0af885947e 100644 --- a/crates/docs/src/lib.rs +++ b/crates/docs/src/lib.rs @@ -438,7 +438,7 @@ pub fn load_modules_for_files(filenames: Vec) -> Vec { match roc_load::load_and_typecheck( &arena, filename, - src_dir.as_path(), + src_dir, Default::default(), roc_target::TargetInfo::default_x86_64(), // This is just type-checking for docs, so "target" doesn't matter roc_reporting::report::RenderTarget::ColorTerminal, diff --git a/crates/repl_eval/src/gen.rs b/crates/repl_eval/src/gen.rs index 24efacca36..07ba4e644e 100644 --- a/crates/repl_eval/src/gen.rs +++ b/crates/repl_eval/src/gen.rs @@ -1,7 +1,7 @@ use bumpalo::Bump; use roc_load::Threading; use roc_reporting::report::Palette; -use std::path::{Path, PathBuf}; +use std::path::PathBuf; use roc_fmt::annotation::Formattable; use roc_fmt::annotation::{Newlines, Parens}; @@ -49,7 +49,7 @@ pub fn compile_to_mono<'a>( palette: Palette, ) -> Result, Vec> { let filename = PathBuf::from(""); - let src_dir = Path::new("fake/test/path"); + let src_dir = PathBuf::from("fake/test/path"); let module_src = arena.alloc(promote_expr_to_module(src));