Inline-Lua
view release on metacpan or search on metacpan
ffi/target/release/build/mlua-sys-6a99a2ae50f12319/out/luajit-build/build/src/lj_api.c view on Meta::CPAN
if (tvisstr(o)) {
return strV(o)->len;
} else if (tvistab(o)) {
return (size_t)lj_tab_len(tabV(o));
} else if (tvisudata(o)) {
return udataV(o)->len;
} else if (tvisnumber(o)) {
GCstr *s = lj_strfmt_number(L, o);
setstrV(L, o, s);
return s->len;
} else {
return 0;
}
}
LUA_API lua_CFunction lua_tocfunction(lua_State *L, int idx)
{
cTValue *o = index2adr(L, idx);
if (tvisfunc(o)) {
BCOp op = bc_op(*mref(funcV(o)->c.pc, BCIns));
if (op == BC_FUNCC || op == BC_FUNCCW)
return funcV(o)->c.f;
}
return NULL;
}
LUA_API void *lua_touserdata(lua_State *L, int idx)
{
cTValue *o = index2adr(L, idx);
if (tvisudata(o))
return uddata(udataV(o));
else if (tvislightud(o))
return lightudV(G(L), o);
else
return NULL;
}
LUA_API lua_State *lua_tothread(lua_State *L, int idx)
{
cTValue *o = index2adr(L, idx);
return (!tvisthread(o)) ? NULL : threadV(o);
}
LUA_API const void *lua_topointer(lua_State *L, int idx)
{
return lj_obj_ptr(G(L), index2adr(L, idx));
}
/* -- Stack setters (object creation) ------------------------------------- */
LUA_API void lua_pushnil(lua_State *L)
{
setnilV(L->top);
incr_top(L);
}
LUA_API void lua_pushnumber(lua_State *L, lua_Number n)
{
setnumV(L->top, n);
if (LJ_UNLIKELY(tvisnan(L->top)))
setnanV(L->top); /* Canonicalize injected NaNs. */
incr_top(L);
}
LUA_API void lua_pushinteger(lua_State *L, lua_Integer n)
{
setintptrV(L->top, n);
incr_top(L);
}
LUA_API void lua_pushlstring(lua_State *L, const char *str, size_t len)
{
GCstr *s;
lj_gc_check(L);
s = lj_str_new(L, str, len);
setstrV(L, L->top, s);
incr_top(L);
}
LUA_API void lua_pushstring(lua_State *L, const char *str)
{
if (str == NULL) {
setnilV(L->top);
} else {
GCstr *s;
lj_gc_check(L);
s = lj_str_newz(L, str);
setstrV(L, L->top, s);
}
incr_top(L);
}
LUA_API const char *lua_pushvfstring(lua_State *L, const char *fmt,
va_list argp)
{
lj_gc_check(L);
return lj_strfmt_pushvf(L, fmt, argp);
}
LUA_API const char *lua_pushfstring(lua_State *L, const char *fmt, ...)
{
const char *ret;
va_list argp;
lj_gc_check(L);
va_start(argp, fmt);
ret = lj_strfmt_pushvf(L, fmt, argp);
va_end(argp);
return ret;
}
LUA_API void lua_pushcclosure(lua_State *L, lua_CFunction f, int n)
{
GCfunc *fn;
lj_gc_check(L);
lj_checkapi_slot(n);
fn = lj_func_newC(L, (MSize)n, getcurrenv(L));
fn->c.f = f;
L->top -= n;
while (n--)
copyTV(L, &fn->c.upvalue[n], L->top+n);
setfuncV(L, L->top, fn);
( run in 2.807 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )