add new canonicalize phase

This commit is contained in:
Folkert 2020-10-25 22:58:38 +01:00
parent 7d2cc3aac2
commit fff0c37e40

View file

@ -7,7 +7,7 @@ use parking_lot::Mutex;
use roc_builtins::std::{Mode, StdLib}; use roc_builtins::std::{Mode, StdLib};
use roc_can::constraint::Constraint; use roc_can::constraint::Constraint;
use roc_can::def::Declaration; use roc_can::def::Declaration;
use roc_can::module::{canonicalize_module_defs, Module}; use roc_can::module::{canonicalize_module_defs, Module, ModuleOutput};
use roc_collections::all::{default_hasher, MutMap, MutSet}; use roc_collections::all::{default_hasher, MutMap, MutSet};
use roc_constrain::module::{ use roc_constrain::module::{
constrain_imports, load_builtin_aliases, pre_constrain_imports, ConstrainableImports, Import, constrain_imports, load_builtin_aliases, pre_constrain_imports, ConstrainableImports, Import,
@ -57,16 +57,18 @@ macro_rules! log {
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Debug)] #[derive(PartialEq, Eq, PartialOrd, Ord, Hash, Clone, Copy, Debug)]
pub enum Phase { pub enum Phase {
LoadHeader, LoadHeader,
ParseAndGenerateConstraints, Parse,
CanonicalizeAndConstrain,
SolveTypes, SolveTypes,
FindSpecializations, FindSpecializations,
MakeSpecializations, MakeSpecializations,
} }
/// NOTE keep up to date manually, from ParseAndGenerateConstraints to the highest phase we support /// NOTE keep up to date manually, from ParseAndGenerateConstraints to the highest phase we support
const PHASES: [Phase; 5] = [ const PHASES: [Phase; 6] = [
Phase::LoadHeader, Phase::LoadHeader,
Phase::ParseAndGenerateConstraints, Phase::Parse,
Phase::CanonicalizeAndConstrain,
Phase::SolveTypes, Phase::SolveTypes,
Phase::FindSpecializations, Phase::FindSpecializations,
Phase::MakeSpecializations, Phase::MakeSpecializations,
@ -199,6 +201,7 @@ impl Dependencies {
struct ModuleCache<'a> { struct ModuleCache<'a> {
module_names: MutMap<ModuleId, ModuleName>, module_names: MutMap<ModuleId, ModuleName>,
headers: MutMap<ModuleId, ModuleHeader<'a>>, headers: MutMap<ModuleId, ModuleHeader<'a>>,
canonicalized: MutMap<ModuleId, ModuleOutput>,
constrained: MutMap<ModuleId, ConstrainedModule<'a>>, constrained: MutMap<ModuleId, ConstrainedModule<'a>>,
typechecked: MutMap<ModuleId, TypeCheckedModule<'a>>, typechecked: MutMap<ModuleId, TypeCheckedModule<'a>>,
found_specializations: MutMap<ModuleId, FoundSpecializationsModule<'a>>, found_specializations: MutMap<ModuleId, FoundSpecializationsModule<'a>>,