Skip to main content

luaur_vm/functions/
lua_breakpoint.rs

1use 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}