luaur_vm/functions/
lua_l_addvalueany.rs1use crate::enums::lua_type::lua_Type;
5use crate::functions::lua_l_addlstring::lua_l_addlstring;
6use crate::functions::lua_l_addvalue::lua_l_addvalue;
7use crate::functions::lua_l_tolstring::lua_l_tolstring;
8use crate::functions::lua_toboolean::lua_toboolean;
9use crate::functions::lua_tointeger_64::lua_tointeger_64;
10use crate::functions::lua_tolstring::lua_tolstring;
11use crate::functions::lua_tonumberx::lua_tonumberx;
12use crate::functions::lua_type::lua_type;
13use crate::functions::luai_int_2_str::luai_int2str;
14use crate::functions::luai_num_2_str::luai_num2str;
15use crate::macros::luai_maxint_2_str::LUAI_MAXINT2STR;
16use crate::macros::luai_maxnum_2_str::LUAI_MAXNUM2STR;
17use crate::records::lua_l_strbuf::LuaLStrbuf;
18use core::ffi::{c_char, c_int};
19
20pub fn lua_l_addvalueany(B: *mut LuaLStrbuf, idx: c_int) {
24 unsafe {
25 let L = (*B).L;
26
27 match lua_type(L, idx) {
28 x if x == lua_Type::LUA_TNONE as c_int => {
29 panic!("expected value");
30 }
31 x if x == lua_Type::LUA_TNIL as c_int => {
32 lua_l_addlstring(B, c"nil".as_ptr(), 3);
33 }
34 x if x == lua_Type::LUA_TBOOLEAN as c_int => {
35 if lua_toboolean(L, idx) != 0 {
36 lua_l_addlstring(B, c"true".as_ptr(), 4);
37 } else {
38 lua_l_addlstring(B, c"false".as_ptr(), 5);
39 }
40 }
41 x if x == lua_Type::LUA_TNUMBER as c_int => {
42 let mut isnum: c_int = 0;
43 let n = lua_tonumberx(L, idx, &mut isnum);
44 let mut s = [0 as c_char; LUAI_MAXNUM2STR as usize];
45 let e = luai_num2str(s.as_mut_ptr(), n);
46 lua_l_addlstring(B, s.as_ptr(), e.offset_from(s.as_ptr()) as usize);
47 }
48 x if x == lua_Type::LUA_TSTRING as c_int => {
49 let mut len: usize = 0;
50 let s = lua_tolstring(L, idx, &mut len);
51 lua_l_addlstring(B, s, len);
52 }
53 x if x == lua_Type::LUA_TINTEGER as c_int => {
54 let n = lua_tointeger_64(L, idx, core::ptr::null_mut());
55 let mut s = [0 as c_char; LUAI_MAXINT2STR as usize];
56 let e = luai_int2str(s.as_mut_ptr(), n);
57 lua_l_addlstring(B, s.as_ptr(), e.offset_from(s.as_ptr()) as usize);
58 }
59 _ => {
60 let mut len: usize = 0;
63 lua_l_tolstring(L, idx, &mut len);
64 lua_l_addvalue(B);
65 }
66 }
67 }
68}