Fix derive tests

This commit is contained in:
Ayaz Hafiz 2022-07-12 14:21:56 -04:00
parent a7b06fd7cf
commit b782f013bd
No known key found for this signature in database
GPG key ID: 0E2A37416A25EF58
3 changed files with 25 additions and 15 deletions

View file

@ -150,7 +150,7 @@ impl DerivedModule {
&self, &self,
lambda_set_var: Variable, lambda_set_var: Variable,
target: &mut Subs, target: &mut Subs,
target_rank: Rank, _target_rank: Rank,
) -> Variable { ) -> Variable {
let ambient_function_var = self.subs.get_lambda_set(lambda_set_var).ambient_function; let ambient_function_var = self.subs.get_lambda_set(lambda_set_var).ambient_function;
@ -198,8 +198,19 @@ impl DerivedModule {
.collect() .collect()
} }
pub fn decompose(self) -> IdentIds { /// # Safety
self.derived_ident_ids ///
/// Prefer using a fresh Derived module with [`Derived::default`]. Use this only in testing.
pub unsafe fn from_components(subs: Subs, ident_ids: IdentIds) -> Self {
Self {
map: Default::default(),
subs,
derived_ident_ids: ident_ids,
}
}
pub fn decompose(self) -> (Subs, IdentIds) {
(self.subs, self.derived_ident_ids)
} }
} }

View file

@ -2680,7 +2680,7 @@ fn finish_specialization(
let mut all_ident_ids = state.constrained_ident_ids; let mut all_ident_ids = state.constrained_ident_ids;
// Associate the ident IDs from the derived synth module // Associate the ident IDs from the derived synth module
let derived_synth_ident_ids = Arc::try_unwrap(state.derived_module) let (_, derived_synth_ident_ids) = Arc::try_unwrap(state.derived_module)
.unwrap_or_else(|_| internal_error!("Outstanding references to the derived module")) .unwrap_or_else(|_| internal_error!("Outstanding references to the derived module"))
.into_inner() .into_inner()
.unwrap() .unwrap()
@ -2805,7 +2805,7 @@ fn finish(
.into_module_ids(); .into_module_ids();
// Associate the ident IDs from the derived synth module // Associate the ident IDs from the derived synth module
let derived_synth_ident_ids = Arc::try_unwrap(state.derived_module) let (_, derived_synth_ident_ids) = Arc::try_unwrap(state.derived_module)
.unwrap_or_else(|_| internal_error!("Outstanding references to the derived module")) .unwrap_or_else(|_| internal_error!("Outstanding references to the derived module"))
.into_inner() .into_inner()
.unwrap() .unwrap()

View file

@ -22,12 +22,12 @@ use roc_can::{
use roc_collections::VecSet; use roc_collections::VecSet;
use roc_constrain::expr::constrain_decls; use roc_constrain::expr::constrain_decls;
use roc_debug_flags::dbg_do; use roc_debug_flags::dbg_do;
use roc_derive::{synth_var, DerivedModule, StolenFromDerived}; use roc_derive::{synth_var, DerivedModule};
use roc_derive_key::{DeriveKey, Derived}; use roc_derive_key::{DeriveKey, Derived};
use roc_load_internal::file::{add_imports, default_aliases, LoadedModule, Threading}; use roc_load_internal::file::{add_imports, default_aliases, LoadedModule, Threading};
use roc_module::{ use roc_module::{
ident::TagName, ident::TagName,
symbol::{Interns, ModuleId, Symbol}, symbol::{IdentIds, Interns, ModuleId, Symbol},
}; };
use roc_region::all::LineInfo; use roc_region::all::LineInfo;
use roc_reporting::report::{type_problem, RocDocAllocator}; use roc_reporting::report::{type_problem, RocDocAllocator};
@ -244,12 +244,12 @@ where
) )
.unwrap(); .unwrap();
let mut derived_module = DerivedModule::default(); let mut subs = Subs::new();
let ident_ids = IdentIds::default();
let source_var = synth_input(&mut subs);
let key = get_key(&subs, source_var);
let mut stolen = derived_module.steal(); let mut derived_module = unsafe { DerivedModule::from_components(subs, ident_ids) };
let source_var = synth_input(&mut stolen.subs);
let key = get_key(&stolen.subs, source_var);
derived_module.return_stolen(stolen);
let mut exposed_by_module = ExposedByModule::default(); let mut exposed_by_module = ExposedByModule::default();
exposed_by_module.insert( exposed_by_module.insert(
@ -260,13 +260,12 @@ where
}, },
); );
let (derived_symbol, derived_def, specialization_lsets) = let (_derived_symbol, derived_def, specialization_lsets) =
derived_module.get_or_insert(&exposed_by_module, key); derived_module.get_or_insert(&exposed_by_module, key);
let derived_symbol = *derived_symbol;
let specialization_lsets = specialization_lsets.clone(); let specialization_lsets = specialization_lsets.clone();
let derived_def = derived_def.clone(); let derived_def = derived_def.clone();
let StolenFromDerived { ident_ids, subs } = derived_module.steal(); let (subs, ident_ids) = derived_module.decompose();
interns.all_ident_ids.insert(DERIVED_MODULE, ident_ids); interns.all_ident_ids.insert(DERIVED_MODULE, ident_ids);
DERIVED_MODULE.register_debug_idents(interns.all_ident_ids.get(&DERIVED_MODULE).unwrap()); DERIVED_MODULE.register_debug_idents(interns.all_ident_ids.get(&DERIVED_MODULE).unwrap());