use crate::functions::on_destroy_function::on_destroy_function;
use crate::type_aliases::lua_state::lua_State;
use luaur_vm::macros::clvalue::clvalue;
use luaur_vm::macros::ttisfunction::ttisfunction;
use luaur_vm::type_aliases::t_value::TValue;
#[allow(non_snake_case)]
pub fn disable_native_execution_for_function(L: *mut lua_State, level: i32) {
unsafe {
if L.is_null() {
return;
}
let ci = (*L).ci;
let base_ci = (*L).base_ci;
let diff = ci.offset_from(base_ci);
if !(level as u32) < diff as u32 {
return;
}
let ci_ptr = ci.offset(-(level as isize));
let o = (*ci_ptr).func as *const TValue;
if !ttisfunction!(o) {
return;
}
let cl = clvalue!(o);
let proto = (*(*cl).inner.l).p;
if proto.is_null() {
return;
}
if (*proto).codeentry == (*proto).code {
return;
}
on_destroy_function(L, proto);
}
}