Skip to main content

luaur_vm/functions/
lua_tolstringatom.rs

1use core::ffi::{c_char, c_int};
2
3use crate::functions::index_2_addr::index2addr;
4use crate::macros::getstr::getstr;
5use crate::macros::lua_s_updateatom::luaS_updateatom;
6use crate::macros::tsvalue::tsvalue;
7use crate::macros::ttisstring::ttisstring;
8use crate::type_aliases::lua_state::lua_State;
9use crate::type_aliases::stk_id::StkId;
10
11#[allow(non_snake_case)]
12pub unsafe fn lua_tolstringatom(
13    L: *mut lua_State,
14    idx: c_int,
15    len: *mut usize,
16    atom: *mut c_int,
17) -> *const c_char {
18    let o: StkId = index2addr(L, idx);
19
20    if !ttisstring!(o) {
21        if !len.is_null() {
22            *len = 0;
23        }
24        return core::ptr::null();
25    }
26
27    let s = tsvalue!(o);
28    if !len.is_null() {
29        *len = (*s).len as usize;
30    }
31
32    if !atom.is_null() {
33        luaS_updateatom!(L, s as *mut crate::records::t_string::TString);
34        *atom = (*s).atom as c_int;
35    }
36
37    getstr(s as *const crate::records::t_string::TString)
38}