luaur_vm/functions/
lua_d_seterrorobj.rs1use 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 setobj_2_s!(l, oldtop, (*l).top.offset(-1));
23 }
24
25 (*l).top = oldtop.offset(1);
26}