luaur_analysis/methods/
normalizer_is_inhabited_normalize_alt_b.rs1use crate::enums::normalization_result::NormalizationResult;
2use crate::functions::get_type_alt_j::get_type_id;
3use crate::records::never_type::NeverType;
4use crate::records::normalized_type::NormalizedType;
5use crate::records::normalizer::Normalizer;
6use crate::type_aliases::type_id::TypeId;
7use luaur_common::records::dense_hash_set::DenseHashSet;
8use luaur_common::FFlag;
9
10impl Normalizer {
11 pub fn is_inhabited_normalized_type_set_type_id(
12 &mut self,
13 norm: &NormalizedType,
14 seen: &mut DenseHashSet<TypeId>,
15 ) -> NormalizationResult {
16 if FFlag::LuauIntegerType2.get() {
17 if unsafe { get_type_id::<NeverType>(norm.tops).is_null() }
18 || unsafe { get_type_id::<NeverType>(norm.booleans).is_null() }
19 || unsafe { get_type_id::<NeverType>(norm.errors).is_null() }
20 || unsafe { get_type_id::<NeverType>(norm.nils).is_null() }
21 || unsafe { get_type_id::<NeverType>(norm.numbers).is_null() }
22 || unsafe { get_type_id::<NeverType>(norm.threads).is_null() }
23 || unsafe { get_type_id::<NeverType>(norm.buffers).is_null() }
24 || !norm.extern_types.is_never()
25 || unsafe { get_type_id::<NeverType>(norm.integers).is_null() }
26 || !norm.strings.is_never()
27 || !norm.functions.is_never()
28 {
29 return NormalizationResult::True;
30 }
31 } else {
32 if unsafe { get_type_id::<NeverType>(norm.tops).is_null() }
33 || unsafe { get_type_id::<NeverType>(norm.booleans).is_null() }
34 || unsafe { get_type_id::<NeverType>(norm.errors).is_null() }
35 || unsafe { get_type_id::<NeverType>(norm.nils).is_null() }
36 || unsafe { get_type_id::<NeverType>(norm.numbers).is_null() }
37 || unsafe { get_type_id::<NeverType>(norm.threads).is_null() }
38 || unsafe { get_type_id::<NeverType>(norm.buffers).is_null() }
39 || !norm.extern_types.is_never()
40 || !norm.strings.is_never()
41 || !norm.functions.is_never()
42 {
43 return NormalizationResult::True;
44 }
45 }
46
47 for (_, intersect) in &norm.tyvars {
48 let res = self.is_inhabited_normalized_type_set_type_id(intersect, seen);
49 if res != NormalizationResult::False {
50 return res;
51 }
52 }
53
54 for &table in &norm.tables.order {
55 let res = self.is_inhabited_type_id_set_type_id(table, seen);
56 if res != NormalizationResult::False {
57 return res;
58 }
59 }
60
61 NormalizationResult::False
62 }
63}