Skip to main content

luaur_analysis/methods/
non_strict_context_conjunction.rs

1use crate::functions::simplify_intersection_simplify::simplify_intersection;
2use crate::records::builtin_types::BuiltinTypes;
3use crate::records::non_strict_context::NonStrictContext;
4use crate::records::type_arena::TypeArena;
5use crate::type_aliases::type_id::TypeId;
6use alloc::collections::BTreeMap;
7
8pub fn non_strict_context_conjunction(
9    builtins: *mut BuiltinTypes,
10    arena: *mut TypeArena,
11    left: &NonStrictContext,
12    right: &NonStrictContext,
13) -> NonStrictContext {
14    let mut conj = NonStrictContext {
15        context: BTreeMap::new(),
16    };
17
18    for (&def, &left_ty) in &left.context {
19        if let Some(right_ty) = right.find_def(def) {
20            let result = simplify_intersection(builtins, arena, left_ty, right_ty);
21            conj.context.insert(def, result.result);
22        }
23    }
24
25    conj
26}