Skip to main content

luaur_analysis/functions/
simplify_union.rs

1use crate::records::builtin_types::BuiltinTypes;
2use crate::records::simplify_result::SimplifyResult;
3use crate::records::type_arena::TypeArena;
4use crate::records::type_simplifier::TypeSimplifier;
5use crate::type_aliases::type_id::TypeId;
6use luaur_common::records::dense_hash_set::DenseHashSet;
7
8pub fn simplify_union(
9    builtin_types: *mut BuiltinTypes,
10    arena: *mut TypeArena,
11    left: TypeId,
12    right: TypeId,
13) -> SimplifyResult {
14    let builtin_types = unsafe { builtin_types.as_ref() }.expect("builtin_types is null");
15    let arena = unsafe { arena.as_ref() }.expect("arena is null");
16
17    let mut s = TypeSimplifier {
18        builtin_types,
19        arena,
20        blocked_types: DenseHashSet::new(core::ptr::null_mut()),
21        recursion_depth: 0,
22    };
23
24    let res = s.union_(left, right);
25
26    SimplifyResult {
27        result: res,
28        blocked_types: core::mem::replace(
29            &mut s.blocked_types,
30            DenseHashSet::new(core::ptr::null_mut()),
31        ),
32    }
33}