Skip to main content

luaur_analysis/methods/
clone_public_interface_is_dirty_module.rs

1use crate::functions::get_type_alt_j::get_type_id;
2use crate::records::clone_public_interface::ClonePublicInterface;
3use crate::records::function_type::FunctionType;
4use crate::records::table_type::TableType;
5use crate::type_aliases::type_id::TypeId;
6
7impl ClonePublicInterface {
8    /// `bool ClonePublicInterface::isDirty(TypeId ty)`.
9    /// Reference: `Module.cpp:134-144`.
10    pub fn is_dirty_type_id(&mut self, ty: TypeId) -> bool {
11        let module = unsafe { &*self.module };
12
13        let owning_arena = unsafe { (*ty).owning_arena };
14        if owning_arena == (&module.internal_types as *const _ as *mut _) {
15            return true;
16        }
17
18        let ftv = unsafe { get_type_id::<FunctionType>(ty) };
19        if !ftv.is_null() {
20            return unsafe { (*ftv).level.level } != 0;
21        }
22
23        let ttv = unsafe { get_type_id::<TableType>(ty) };
24        if !ttv.is_null() {
25            return unsafe { (*ttv).level.level } != 0;
26        }
27
28        false
29    }
30}