Skip to main content

luaur_analysis/methods/
unifier_cache_result.rs

1use 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                // C++: `sharedState.cachedUnifyError[{subTy, superTy}] = errors.back().data;`
20                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}