mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-26 21:39:07 +00:00
Serialize abilities store and solved implementations with subs
This commit is contained in:
parent
46eb427393
commit
7e79ff55f1
7 changed files with 281 additions and 80 deletions
|
@ -11,7 +11,7 @@ use roc_can::expr::Declarations;
|
|||
use roc_can::expr::PendingDerives;
|
||||
use roc_can::module::{
|
||||
canonicalize_module_defs, ExposedByModule, ExposedForModule, ExposedModuleTypes, Module,
|
||||
ResolvedImplementations,
|
||||
ResolvedImplementations, TypeState,
|
||||
};
|
||||
use roc_collections::{default_hasher, BumpMap, MutMap, MutSet, VecMap, VecSet};
|
||||
use roc_constrain::module::constrain_module;
|
||||
|
@ -353,7 +353,7 @@ fn start_phase<'a>(
|
|||
let skip_constraint_gen = {
|
||||
// Give this its own scope to make sure that the Guard from the lock() is dropped
|
||||
// immediately after contains_key returns
|
||||
state.cached_subs.lock().contains_key(&module_id)
|
||||
state.cached_types.lock().contains_key(&module_id)
|
||||
};
|
||||
|
||||
BuildTask::CanonicalizeAndConstrain {
|
||||
|
@ -398,7 +398,7 @@ fn start_phase<'a>(
|
|||
&state.exposed_types,
|
||||
dep_idents,
|
||||
declarations,
|
||||
state.cached_subs.clone(),
|
||||
state.cached_types.clone(),
|
||||
derived_module,
|
||||
)
|
||||
}
|
||||
|
@ -927,13 +927,13 @@ struct State<'a> {
|
|||
|
||||
make_specializations_pass: MakeSpecializationsPass,
|
||||
|
||||
// cached subs (used for builtin modules, could include packages in the future too)
|
||||
cached_subs: CachedSubs,
|
||||
// cached types (used for builtin modules, could include packages in the future too)
|
||||
cached_types: CachedTypeState,
|
||||
|
||||
layout_interner: Arc<GlobalInterner<'a, Layout<'a>>>,
|
||||
}
|
||||
|
||||
type CachedSubs = Arc<Mutex<MutMap<ModuleId, (Subs, Vec<(Symbol, Variable)>)>>>;
|
||||
type CachedTypeState = Arc<Mutex<MutMap<ModuleId, TypeState>>>;
|
||||
|
||||
impl<'a> State<'a> {
|
||||
fn goal_phase(&self) -> Phase {
|
||||
|
@ -947,7 +947,7 @@ impl<'a> State<'a> {
|
|||
exposed_types: ExposedByModule,
|
||||
arc_modules: Arc<Mutex<PackageModuleIds<'a>>>,
|
||||
ident_ids_by_module: SharedIdentIdsByModule,
|
||||
cached_subs: MutMap<ModuleId, (Subs, Vec<(Symbol, Variable)>)>,
|
||||
cached_types: MutMap<ModuleId, TypeState>,
|
||||
render: RenderTarget,
|
||||
number_of_workers: usize,
|
||||
exec_mode: ExecutionMode,
|
||||
|
@ -978,7 +978,7 @@ impl<'a> State<'a> {
|
|||
exposed_symbols_by_module: MutMap::default(),
|
||||
timings: MutMap::default(),
|
||||
layout_caches: std::vec::Vec::with_capacity(number_of_workers),
|
||||
cached_subs: Arc::new(Mutex::new(cached_subs)),
|
||||
cached_types: Arc::new(Mutex::new(cached_types)),
|
||||
render,
|
||||
exec_mode,
|
||||
make_specializations_pass: MakeSpecializationsPass::Pass(1),
|
||||
|
@ -1091,7 +1091,7 @@ enum BuildTask<'a> {
|
|||
var_store: VarStore,
|
||||
declarations: Declarations,
|
||||
dep_idents: IdentIdsByModule,
|
||||
cached_subs: CachedSubs,
|
||||
cached_subs: CachedTypeState,
|
||||
derived_module: SharedDerivedModule,
|
||||
},
|
||||
BuildPendingSpecializations {
|
||||
|
@ -1456,7 +1456,7 @@ pub fn load<'a>(
|
|||
arena: &'a Bump,
|
||||
load_start: LoadStart<'a>,
|
||||
exposed_types: ExposedByModule,
|
||||
cached_subs: MutMap<ModuleId, (Subs, Vec<(Symbol, Variable)>)>,
|
||||
cached_types: MutMap<ModuleId, TypeState>,
|
||||
load_config: LoadConfig,
|
||||
) -> Result<LoadResult<'a>, LoadingProblem<'a>> {
|
||||
enum Threads {
|
||||
|
@ -1489,7 +1489,7 @@ pub fn load<'a>(
|
|||
load_start,
|
||||
exposed_types,
|
||||
load_config.target_info,
|
||||
cached_subs,
|
||||
cached_types,
|
||||
load_config.render,
|
||||
load_config.exec_mode,
|
||||
),
|
||||
|
@ -1498,7 +1498,7 @@ pub fn load<'a>(
|
|||
load_start,
|
||||
exposed_types,
|
||||
load_config.target_info,
|
||||
cached_subs,
|
||||
cached_types,
|
||||
load_config.render,
|
||||
threads,
|
||||
load_config.exec_mode,
|
||||
|
@ -1513,7 +1513,7 @@ pub fn load_single_threaded<'a>(
|
|||
load_start: LoadStart<'a>,
|
||||
exposed_types: ExposedByModule,
|
||||
target_info: TargetInfo,
|
||||
cached_subs: MutMap<ModuleId, (Subs, Vec<(Symbol, Variable)>)>,
|
||||
cached_types: MutMap<ModuleId, TypeState>,
|
||||
render: RenderTarget,
|
||||
exec_mode: ExecutionMode,
|
||||
) -> Result<LoadResult<'a>, LoadingProblem<'a>> {
|
||||
|
@ -1539,7 +1539,7 @@ pub fn load_single_threaded<'a>(
|
|||
exposed_types,
|
||||
arc_modules,
|
||||
ident_ids_by_module,
|
||||
cached_subs,
|
||||
cached_types,
|
||||
render,
|
||||
number_of_workers,
|
||||
exec_mode,
|
||||
|
@ -1761,7 +1761,7 @@ fn load_multi_threaded<'a>(
|
|||
load_start: LoadStart<'a>,
|
||||
exposed_types: ExposedByModule,
|
||||
target_info: TargetInfo,
|
||||
cached_subs: MutMap<ModuleId, (Subs, Vec<(Symbol, Variable)>)>,
|
||||
cached_types: MutMap<ModuleId, TypeState>,
|
||||
render: RenderTarget,
|
||||
available_threads: usize,
|
||||
exec_mode: ExecutionMode,
|
||||
|
@ -1803,7 +1803,7 @@ fn load_multi_threaded<'a>(
|
|||
exposed_types,
|
||||
arc_modules,
|
||||
ident_ids_by_module,
|
||||
cached_subs,
|
||||
cached_types,
|
||||
render,
|
||||
num_workers,
|
||||
exec_mode,
|
||||
|
@ -4192,7 +4192,7 @@ impl<'a> BuildTask<'a> {
|
|||
exposed_types: &ExposedByModule,
|
||||
dep_idents: IdentIdsByModule,
|
||||
declarations: Declarations,
|
||||
cached_subs: CachedSubs,
|
||||
cached_subs: CachedTypeState,
|
||||
derived_module: SharedDerivedModule,
|
||||
) -> Self {
|
||||
let exposed_by_module = exposed_types.retain_modules(imported_modules.keys());
|
||||
|
@ -4499,7 +4499,7 @@ fn run_solve<'a>(
|
|||
var_store: VarStore,
|
||||
decls: Declarations,
|
||||
dep_idents: IdentIdsByModule,
|
||||
cached_subs: CachedSubs,
|
||||
cached_types: CachedTypeState,
|
||||
derived_module: SharedDerivedModule,
|
||||
) -> Msg<'a> {
|
||||
let solve_start = Instant::now();
|
||||
|
@ -4515,7 +4515,7 @@ fn run_solve<'a>(
|
|||
|
||||
let (solved_subs, solved_implementations, exposed_vars_by_symbol, problems, abilities_store) = {
|
||||
if module_id.is_builtin() {
|
||||
match cached_subs.lock().remove(&module_id) {
|
||||
match cached_types.lock().remove(&module_id) {
|
||||
None => run_solve_solve(
|
||||
exposed_for_module,
|
||||
constraints,
|
||||
|
@ -4525,17 +4525,18 @@ fn run_solve<'a>(
|
|||
module,
|
||||
derived_module,
|
||||
),
|
||||
Some((subs, exposed_vars_by_symbol)) => {
|
||||
(
|
||||
Solved(subs),
|
||||
// TODO(abilities) cache abilities for builtins
|
||||
VecMap::default(),
|
||||
exposed_vars_by_symbol.to_vec(),
|
||||
vec![],
|
||||
// TODO(abilities) cache abilities for builtins
|
||||
AbilitiesStore::default(),
|
||||
)
|
||||
}
|
||||
Some(TypeState {
|
||||
subs,
|
||||
exposed_vars_by_symbol,
|
||||
abilities,
|
||||
solved_implementations,
|
||||
}) => (
|
||||
Solved(subs),
|
||||
solved_implementations,
|
||||
exposed_vars_by_symbol,
|
||||
vec![],
|
||||
abilities,
|
||||
),
|
||||
}
|
||||
} else {
|
||||
run_solve_solve(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue