Skip to main content

luaur_analysis/methods/
normalizer_union_of_bools.rs

1use crate::records::normalizer::Normalizer;
2use crate::type_aliases::type_id::TypeId;
3
4use crate::records::boolean_singleton::BooleanSingleton;
5use crate::records::never_type::NeverType;
6use crate::records::singleton_type::SingletonType;
7
8use crate::functions::get_type_alt_j::get_type_id;
9
10impl Normalizer {
11    pub fn union_of_bools(&mut self, here: TypeId, there: TypeId) -> TypeId {
12        self.consume_fuel();
13
14        if !unsafe { get_type_id::<NeverType>(here).is_null() } {
15            return there;
16        }
17        if !unsafe { get_type_id::<NeverType>(there).is_null() } {
18            return here;
19        }
20
21        if let Some(hbool) = unsafe {
22            get_type_id::<SingletonType>(here)
23                .as_ref()
24                .and_then(|s| s.variant.get_if::<BooleanSingleton>())
25        } {
26            if let Some(tbool) = unsafe {
27                get_type_id::<SingletonType>(there)
28                    .as_ref()
29                    .and_then(|s| s.variant.get_if::<BooleanSingleton>())
30            } {
31                if hbool.value == tbool.value {
32                    return here;
33                }
34            }
35        }
36
37        unsafe { (*self.builtin_types).booleanType }
38    }
39}