luaur_code_gen/functions/
disable_native_execution_for_function.rs1use crate::functions::on_destroy_function::on_destroy_function;
2use crate::type_aliases::lua_state::lua_State;
3
4use luaur_vm::macros::clvalue::clvalue;
5use luaur_vm::macros::ttisfunction::ttisfunction;
6use luaur_vm::type_aliases::t_value::TValue;
7
8#[allow(non_snake_case)]
9pub fn disable_native_execution_for_function(L: *mut lua_State, level: i32) {
10 unsafe {
11 if L.is_null() {
12 return;
13 }
14
15 let ci = (*L).ci;
17 let base_ci = (*L).base_ci;
18
19 let diff = ci.offset_from(base_ci);
20 if !(level as u32) < diff as u32 {
21 return;
23 }
24
25 let ci_ptr = ci.offset(-(level as isize));
27
28 let o = (*ci_ptr).func as *const TValue;
30
31 if !ttisfunction!(o) {
33 return;
34 }
35
36 let cl = clvalue!(o);
38 let proto = (*(*cl).inner.l).p;
39
40 if proto.is_null() {
41 return;
42 }
43
44 if (*proto).codeentry == (*proto).code {
46 return;
47 }
48
49 on_destroy_function(L, proto);
50 }
51}