luaur_analysis/methods/
unifier_cache_result.rs1use crate::records::unifier::Unifier;
2use crate::type_aliases::type_id::TypeId;
3
4impl Unifier {
5 pub fn unifier_cache_result(
6 &mut self,
7 sub_ty: TypeId,
8 super_ty: TypeId,
9 prev_error_count: usize,
10 ) {
11 if self.errors.len() == prev_error_count {
12 if self.unifier_can_cache_result(sub_ty, super_ty) {
13 unsafe {
14 (*self.shared_state).cached_unify.insert((sub_ty, super_ty));
15 }
16 }
17 } else if self.errors.len() == prev_error_count + 1 {
18 if self.unifier_can_cache_result(sub_ty, super_ty) {
19 let error_data = self.errors.last().unwrap().data.clone();
21 unsafe {
22 *(*self.shared_state)
23 .cached_unify_error
24 .get_or_insert((sub_ty, super_ty)) = error_data;
25 }
26 }
27 }
28 }
29}