luaur_vm/functions/
lua_l_pushresult.rs1use crate::functions::lua_pushlstring::lua_pushlstring;
2use crate::functions::lua_s_buffinish::lua_s_buffinish;
3use crate::functions::lua_s_newlstr::luaS_newlstr;
4use crate::macros::lua_c_check_gc::luaC_checkGC;
5use crate::macros::setsvalue::setsvalue;
6use crate::records::lua_l_strbuf::LuaLStrbuf;
7use crate::records::t_string::TString;
8use crate::type_aliases::lua_state::lua_State;
9
10#[allow(non_snake_case)]
11pub unsafe fn lua_l_pushresult(B: *mut LuaLStrbuf) {
12 let L = (*B).L;
13 let storage = (*B).storage;
14
15 if !storage.is_null() {
16 luaC_checkGC!(L);
17
18 let p = (*B).p;
19 let end = (*B).end;
20
21 if p == end {
22 setsvalue!(L, (*L).top.offset(-1), lua_s_buffinish(L, storage));
23 } else {
24 let storage_data = (*storage).data.as_ptr();
25 let len = (p as usize).wrapping_sub(storage_data as usize);
26 setsvalue!(L, (*L).top.offset(-1), luaS_newlstr(L, storage_data, len));
27 }
28 } else {
29 let p = (*B).p;
30 let buffer = (*B).buffer.as_ptr();
31 let len = (p as usize).wrapping_sub(buffer as usize);
32 lua_pushlstring(L, buffer, len);
33 }
34}