skip constraint gen for cached modules

This commit is contained in:
Folkert 2022-04-17 14:51:56 +02:00
parent ec17367707
commit 2784affbc1
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C

View file

@ -286,12 +286,15 @@ fn start_phase<'a>(
} }
} }
let skip_constraint_gen = state.cached_subs.lock().contains_key(&module_id);
BuildTask::CanonicalizeAndConstrain { BuildTask::CanonicalizeAndConstrain {
parsed, parsed,
dep_idents, dep_idents,
exposed_symbols, exposed_symbols,
module_ids, module_ids,
aliases, aliases,
skip_constraint_gen,
} }
} }
@ -810,6 +813,7 @@ enum BuildTask<'a> {
dep_idents: MutMap<ModuleId, IdentIds>, dep_idents: MutMap<ModuleId, IdentIds>,
exposed_symbols: MutSet<Symbol>, exposed_symbols: MutSet<Symbol>,
aliases: MutMap<Symbol, Alias>, aliases: MutMap<Symbol, Alias>,
skip_constraint_gen: bool,
}, },
Solve { Solve {
module: Module, module: Module,
@ -3767,6 +3771,7 @@ fn canonicalize_and_constrain<'a>(
exposed_symbols: MutSet<Symbol>, exposed_symbols: MutSet<Symbol>,
aliases: MutMap<Symbol, Alias>, aliases: MutMap<Symbol, Alias>,
parsed: ParsedModule<'a>, parsed: ParsedModule<'a>,
skip_constraint_gen: bool,
) -> Result<Msg<'a>, LoadingProblem<'a>> { ) -> Result<Msg<'a>, LoadingProblem<'a>> {
let canonicalize_start = SystemTime::now(); let canonicalize_start = SystemTime::now();
@ -3836,13 +3841,16 @@ fn canonicalize_and_constrain<'a>(
let mut constraints = Constraints::new(); let mut constraints = Constraints::new();
// TODO: don't generate constraints for a builtin module if it's cached let constraint = if skip_constraint_gen {
let constraint = constrain_module( roc_can::constraint::Constraint::True
&mut constraints, } else {
&module_output.scope.abilities_store, constrain_module(
&module_output.declarations, &mut constraints,
module_id, &module_output.scope.abilities_store,
); &module_output.declarations,
module_id,
)
};
let after = roc_types::types::get_type_clone_count(); let after = roc_types::types::get_type_clone_count();
@ -4367,6 +4375,7 @@ fn run_task<'a>(
dep_idents, dep_idents,
exposed_symbols, exposed_symbols,
aliases, aliases,
skip_constraint_gen,
} => canonicalize_and_constrain( } => canonicalize_and_constrain(
arena, arena,
&module_ids, &module_ids,
@ -4374,6 +4383,7 @@ fn run_task<'a>(
exposed_symbols, exposed_symbols,
aliases, aliases,
parsed, parsed,
skip_constraint_gen,
), ),
Solve { Solve {
module, module,