mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 23:31:12 +00:00
Fix derive tests
This commit is contained in:
parent
a7b06fd7cf
commit
b782f013bd
3 changed files with 25 additions and 15 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue