Skip to main content

luaur_vm/functions/
lua_d_seterrorobj.rs

1use crate::enums::lua_status::lua_Status;
2use crate::macros::lua_s_newliteral::luaS_newliteral;
3use crate::macros::setobj_2_s::setobj_2_s;
4use crate::macros::setsvalue::setsvalue;
5use crate::type_aliases::lua_state::lua_State;
6use crate::type_aliases::stk_id::StkId;
7
8#[no_mangle]
9pub unsafe fn luaD_seterrorobj(l: *mut lua_State, errcode: core::ffi::c_int, oldtop: StkId) {
10    if errcode == lua_Status::LUA_ERRMEM as core::ffi::c_int {
11        setsvalue!(l, oldtop, luaS_newliteral(l, c"not enough memory".as_ptr()));
12    } else if errcode == lua_Status::LUA_ERRERR as core::ffi::c_int {
13        setsvalue!(
14            l,
15            oldtop,
16            luaS_newliteral(l, c"error in error handling".as_ptr())
17        );
18    } else if errcode == lua_Status::LUA_ERRSYNTAX as core::ffi::c_int
19        || errcode == lua_Status::LUA_ERRRUN as core::ffi::c_int
20    {
21        // error message on current top
22        setobj_2_s!(l, oldtop, (*l).top.offset(-1));
23    }
24
25    (*l).top = oldtop.offset(1);
26}