Skip to main content

luaur_analysis/methods/
anyification_anyification_anyification.rs

1use crate::records::anyification::Anyification;
2use crate::records::builtin_types::BuiltinTypes;
3use crate::records::internal_error_reporter::InternalErrorReporter;
4use crate::records::scope::Scope;
5use crate::records::substitution::Substitution;
6use crate::records::tarjan::SubstitutionVtable;
7use crate::records::txn_log::TxnLog;
8use crate::records::type_arena::TypeArena;
9use crate::type_aliases::type_id::TypeId;
10use crate::type_aliases::type_pack_id::TypePackId;
11use core::ffi::c_void;
12
13fn anyification_is_dirty_ty(owner: *mut c_void, ty: TypeId) -> bool {
14    unsafe { (*(owner as *mut Anyification)).is_dirty_type_id(ty) }
15}
16
17fn anyification_is_dirty_tp(owner: *mut c_void, tp: TypePackId) -> bool {
18    unsafe { (*(owner as *mut Anyification)).is_dirty_type_pack_id(tp) }
19}
20
21fn anyification_clean_ty(owner: *mut c_void, ty: TypeId) -> TypeId {
22    unsafe { (*(owner as *mut Anyification)).clean_type_id(ty) }
23}
24
25fn anyification_clean_tp(owner: *mut c_void, tp: TypePackId) -> TypePackId {
26    unsafe { (*(owner as *mut Anyification)).clean_type_pack_id(tp) }
27}
28
29fn anyification_found_dirty_ty(owner: *mut c_void, ty: TypeId) {
30    unsafe { (*(owner as *mut Anyification)).base.found_dirty_type_id(ty) }
31}
32
33fn anyification_found_dirty_tp(owner: *mut c_void, tp: TypePackId) {
34    unsafe {
35        (*(owner as *mut Anyification))
36            .base
37            .found_dirty_type_pack_id(tp)
38    }
39}
40
41fn anyification_ignore_children_ty(owner: *mut c_void, ty: TypeId) -> bool {
42    unsafe { (*(owner as *mut Anyification)).ignore_children_type_id(ty) }
43}
44
45fn anyification_ignore_children_tp(owner: *mut c_void, tp: TypePackId) -> bool {
46    unsafe { (*(owner as *mut Anyification)).ignore_children_type_pack_id(tp) }
47}
48
49impl Anyification {
50    pub fn anyification_type_arena_not_null_scope_not_null_builtin_types_internal_error_reporter_type_id_type_pack_id(
51        arena: *mut TypeArena,
52        scope: *mut Scope,
53        builtin_types: *mut BuiltinTypes,
54        ice_handler: *mut InternalErrorReporter,
55        any_type: TypeId,
56        any_type_pack: TypePackId,
57    ) -> Self {
58        Anyification {
59            base: Substitution::substitution_new(TxnLog::empty(), arena),
60            scope,
61            builtin_types,
62            ice_handler,
63            any_type,
64            any_type_pack,
65            normalization_too_complex: false,
66        }
67    }
68
69    fn install_substitution_vtable(&mut self) {
70        let owner = self as *mut Anyification as *mut c_void;
71        self.base.base.vtable = SubstitutionVtable {
72            owner,
73            is_dirty_ty: Some(anyification_is_dirty_ty),
74            is_dirty_tp: Some(anyification_is_dirty_tp),
75            clean_ty: Some(anyification_clean_ty),
76            clean_tp: Some(anyification_clean_tp),
77            found_dirty_ty: Some(anyification_found_dirty_ty),
78            found_dirty_tp: Some(anyification_found_dirty_tp),
79            ignore_children_ty: Some(anyification_ignore_children_ty),
80            ignore_children_tp: Some(anyification_ignore_children_tp),
81            ignore_children_visit_ty: Some(anyification_ignore_children_ty),
82            ignore_children_visit_tp: Some(anyification_ignore_children_tp),
83        };
84    }
85
86    pub fn substitute_type_id(&mut self, ty: TypeId) -> Option<TypeId> {
87        self.install_substitution_vtable();
88        self.base.substitute_type_id(ty)
89    }
90
91    pub fn substitute_type_pack_id(&mut self, tp: TypePackId) -> Option<TypePackId> {
92        self.install_substitution_vtable();
93        self.base.substitute_type_pack_id(tp)
94    }
95}