luaur_vm/functions/
lua_d_callny.rs1use crate::functions::lua_d_check_cstack::luaD_checkCstack;
2use crate::functions::performcall::performcall;
3use crate::macros::isyielded::isyielded;
4use crate::macros::lua_c_check_gc::luaC_checkGC;
5use crate::macros::lua_multret::LUA_MULTRET;
6use crate::macros::luai_maxccalls::LUAI_MAXCCALLS;
7use crate::macros::restorestack::restorestack;
8use crate::macros::savestack::savestack;
9use crate::type_aliases::lua_state::lua_State;
10use crate::type_aliases::stk_id::StkId;
11use luaur_common::macros::luau_assert::LUAU_ASSERT;
12
13#[no_mangle]
14pub unsafe fn lua_d_callny(L: *mut lua_State, func: StkId, nresults: core::ffi::c_int) {
15 let l_ref = &mut *L;
16
17 l_ref.nCcalls += 1;
18 if l_ref.nCcalls >= LUAI_MAXCCALLS as u16 {
19 luaD_checkCstack(L);
20 }
21
22 LUAU_ASSERT!(l_ref.nCcalls > l_ref.baseCcalls);
23
24 let funcoffset = savestack!(L, func);
25
26 performcall(L, func, nresults, false);
27
28 LUAU_ASSERT!(!isyielded(L));
29
30 if nresults != LUA_MULTRET {
31 (*L).top = restorestack!(L, funcoffset).add(nresults as usize);
32 }
33
34 (*L).nCcalls -= 1;
35 luaC_checkGC!(L);
36}