Skip to main content

luaur_analysis/functions/
is_boolean.rs

1use crate::functions::follow_type::follow_type_id;
2use crate::functions::get_type_alt_j::get_type_id;
3use crate::functions::is_prim::is_prim;
4use crate::records::boolean_singleton::BooleanSingleton;
5use crate::records::primitive_type::PrimitiveType;
6use crate::records::singleton_type::SingletonType;
7use crate::records::union_type::UnionType;
8use crate::type_aliases::singleton_variant::SingletonVariantMember;
9use crate::type_aliases::type_id::TypeId;
10
11pub fn is_boolean(ty: TypeId) -> bool {
12    unsafe {
13        if is_prim(ty, PrimitiveType::Boolean) {
14            return true;
15        }
16
17        let stv = get_type_id::<SingletonType>(follow_type_id(ty));
18        if !stv.is_null() && BooleanSingleton::get_if(&(*stv).variant).is_some() {
19            return true;
20        }
21
22        let utv = get_type_id::<UnionType>(follow_type_id(ty));
23        if !utv.is_null() {
24            return (*utv).options.iter().all(|&opt| is_boolean(opt));
25        }
26
27        false
28    }
29}