Skip to main content

luaur_vm/functions/
lua_costatus.rs

1use crate::enums::lua_co_status::lua_CoStatus;
2use crate::enums::lua_status::lua_Status;
3use crate::macros::api_check::api_check;
4use crate::records::lua_state::lua_State;
5
6#[allow(non_snake_case)]
7pub fn lua_costatus(l: *mut lua_State, co: *mut lua_State) -> core::ffi::c_int {
8    unsafe {
9        api_check!(l, !co.is_null());
10        api_check!(l, (*l).global == (*co).global);
11
12        if co == l {
13            return lua_CoStatus::LUA_CORUN as core::ffi::c_int;
14        }
15        if (*co).status as i32 == lua_Status::LUA_YIELD as i32 {
16            return lua_CoStatus::LUA_COSUS as core::ffi::c_int;
17        }
18        if (*co).status as i32 == lua_Status::LUA_BREAK as i32 {
19            return lua_CoStatus::LUA_CONOR as core::ffi::c_int;
20        }
21        if (*co).status != 0 {
22            return lua_CoStatus::LUA_COERR as core::ffi::c_int;
23        }
24        if (*co).ci != (*co).base_ci {
25            return lua_CoStatus::LUA_CONOR as core::ffi::c_int;
26        }
27        if (*co).top == (*co).base {
28            return lua_CoStatus::LUA_COFIN as core::ffi::c_int;
29        }
30        lua_CoStatus::LUA_COSUS as core::ffi::c_int
31    }
32}