luaur_vm/functions/
lua_breakpoint.rs1use crate::functions::getnextline::getnextline;
2use crate::functions::lua_a_toobject::luaA_toobject;
3use crate::functions::lua_g_breakpoint::lua_g_breakpoint;
4use crate::macros::api_check::api_check;
5use crate::macros::clvalue::clvalue;
6use crate::macros::ttisfunction::ttisfunction;
7use crate::records::proto::Proto;
8use crate::type_aliases::lua_state::lua_State;
9use crate::type_aliases::proto::Proto as ProtoType;
10use crate::type_aliases::t_value::TValue;
11
12#[allow(non_snake_case)]
13pub unsafe fn lua_breakpoint(
14 L: *mut lua_State,
15 funcindex: core::ffi::c_int,
16 line: core::ffi::c_int,
17 enabled: core::ffi::c_int,
18) -> core::ffi::c_int {
19 let func: *const TValue = luaA_toobject(L, funcindex);
20 api_check!(L, ttisfunction!(func) && (*clvalue!(func)).isC == 0);
21
22 let cl = clvalue!(func);
23 let lcl = core::ptr::addr_of!((*cl).inner.l).cast::<crate::records::closure::LClosure>();
24 let p: *mut Proto = (*lcl).p;
25
26 let target = getnextline(p, line);
27
28 if target != -1 {
29 lua_g_breakpoint(L, p, target, enabled != 0);
30 }
31
32 target
33}