Skip to main content

luaur_vm/functions/
lua_resumeerror.rs

1use crate::enums::lua_status::lua_Status;
2use crate::functions::lua_d_rawrunprotected_ldo::lua_d_rawrunprotected;
3use crate::functions::resume_findhandler::resume_findhandler;
4use crate::functions::resume_finish::resume_finish;
5use crate::functions::resume_handle::resume_handle;
6use crate::functions::resume_start::resume_start;
7use crate::macros::cast_byte::cast_byte;
8use crate::type_aliases::lua_state::lua_State;
9
10#[no_mangle]
11pub unsafe fn lua_resumeerror(L: *mut lua_State, from: *mut lua_State) -> i32 {
12    let starterror = resume_start(L, from, 1);
13    if starterror != 0 {
14        return starterror;
15    }
16
17    let old_n_c_calls = (*L).nCcalls;
18    let old_n_c_calls_i32: i32 = old_n_c_calls as i32;
19
20    let status = lua_Status::LUA_ERRRUN as i32;
21
22    let ci = resume_findhandler(L);
23    if !ci.is_null() {
24        (*L).status = cast_byte!(status);
25        let status_result =
26            lua_d_rawrunprotected(L, Some(resume_handle), ci as *mut core::ffi::c_void);
27        return resume_finish(L, status_result, old_n_c_calls_i32);
28    }
29
30    resume_finish(L, status, old_n_c_calls_i32)
31}