Skip to main content

luaur_analysis/methods/
unifier_2_unify_unifier_2_alt_m.rs

1use crate::enums::unify_result::UnifyResult;
2use crate::records::any_type::AnyType;
3use crate::records::builtin_types::BuiltinTypes;
4use crate::records::table_type::TableType;
5use crate::records::unifier_2::Unifier2;
6use crate::type_aliases::type_id::TypeId;
7use core::ptr::NonNull;
8
9impl Unifier2 {
10    pub fn unify_any_type_table_type(
11        &mut self,
12        _sub_any: &AnyType,
13        super_table: &TableType,
14    ) -> UnifyResult {
15        let builtin_types_ptr: NonNull<BuiltinTypes> = self.builtin_types;
16        let builtin_types_ref: &BuiltinTypes = unsafe { builtin_types_ptr.as_ref() };
17        let any_type_id: TypeId = builtin_types_ref.anyType;
18
19        for (_prop_name, prop) in &super_table.props {
20            if let Some(read_ty) = prop.read_ty {
21                let _ = self.unify_type_id_type_id(any_type_id, read_ty);
22            }
23
24            if let Some(write_ty) = prop.write_ty {
25                let _ = self.unify_type_id_type_id(write_ty, any_type_id);
26            }
27        }
28
29        if let Some(indexer) = &super_table.indexer {
30            let _ = self.unify_type_id_type_id(any_type_id, indexer.index_type);
31            let _ = self.unify_type_id_type_id(any_type_id, indexer.index_result_type);
32        }
33
34        UnifyResult::Ok
35    }
36}