luaur_analysis/functions/
get_definition_module_name.rs1use crate::functions::follow_type::follow_type_id;
2use crate::functions::get_type_alt_j::get_type_id;
3use crate::records::extern_type::ExternType;
4use crate::records::function_type::FunctionType;
5use crate::records::table_type::TableType;
6use crate::type_aliases::module_name_type::ModuleName;
7use crate::type_aliases::type_id::TypeId;
8
9pub fn get_definition_module_name(type_: TypeId) -> Option<ModuleName> {
10 let type_ = unsafe { follow_type_id(type_) };
11
12 let ttv = unsafe { get_type_id::<TableType>(type_) };
13 if !ttv.is_null() {
14 let def_mod_name = unsafe { (*ttv).definition_module_name.clone() };
15 if !def_mod_name.is_empty() {
16 return Some(def_mod_name);
17 }
18 }
19
20 let ftv = unsafe { get_type_id::<FunctionType>(type_) };
21 if !ftv.is_null() {
22 if let Some(def) = unsafe { (*ftv).definition.as_ref() } {
23 if let Some(module_name) = def.definition_module_name.clone() {
24 return Some(module_name);
25 }
26 }
27 }
28
29 let etv = unsafe { get_type_id::<ExternType>(type_) };
30 if !etv.is_null() {
31 let def_mod_name = unsafe { (*etv).definition_module_name.clone() };
32 if !def_mod_name.is_empty() {
33 return Some(def_mod_name);
34 }
35 }
36
37 None
38}