Skip to main content

luaur_analysis/functions/
get_definition_module_name.rs

1use 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}