luaur_analysis/methods/
intersection_builder_add.rs1use crate::functions::follow_type::follow_type_id;
2use crate::functions::get_type_alt_j::get_type_id;
3use crate::records::intersection_builder::IntersectionBuilder;
4use crate::records::intersection_type::IntersectionType;
5use crate::records::never_type::NeverType;
6use crate::records::unknown_type::UnknownType;
7use crate::type_aliases::type_id::TypeId;
8
9impl IntersectionBuilder {
10 pub fn add(&mut self, ty: TypeId) {
11 let ty = unsafe { follow_type_id(ty) };
12
13 if unsafe { !get_type_id::<NeverType>(ty).is_null() } {
14 self.is_bottom = true;
15 return;
16 }
17
18 if unsafe { !get_type_id::<UnknownType>(ty).is_null() } {
19 return;
20 }
21
22 if let Some(itv) = unsafe { get_type_id::<IntersectionType>(ty).as_ref() } {
23 for &part in itv.parts.iter() {
24 self.parts.insert_type_id(part);
25 }
26 } else {
27 self.parts.insert_type_id(ty);
28 }
29 }
30}