mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
From Lua 5.2: Add luaL_testudata().
Contributed by François Perrad.
This commit is contained in:
parent
f2e2a3f757
commit
cde968f91f
@ -88,6 +88,7 @@ LUALIB_API void luaL_traceback (lua_State *L, lua_State *L1, const char *msg,
|
|||||||
LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
|
LUALIB_API void (luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
|
||||||
LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
|
LUALIB_API void (luaL_pushmodule) (lua_State *L, const char *modname,
|
||||||
int sizehint);
|
int sizehint);
|
||||||
|
LUALIB_API void *(luaL_testudata) (lua_State *L, int ud, const char *tname);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
12
src/lj_api.c
12
src/lj_api.c
@ -875,7 +875,7 @@ LUA_API void lua_upvaluejoin(lua_State *L, int idx1, int n1, int idx2, int n2)
|
|||||||
lj_gc_objbarrier(L, fn1, gcref(fn1->l.uvptr[n1]));
|
lj_gc_objbarrier(L, fn1, gcref(fn1->l.uvptr[n1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
LUALIB_API void *luaL_checkudata(lua_State *L, int idx, const char *tname)
|
LUALIB_API void *luaL_testudata(lua_State *L, int idx, const char *tname)
|
||||||
{
|
{
|
||||||
cTValue *o = index2adr(L, idx);
|
cTValue *o = index2adr(L, idx);
|
||||||
if (tvisudata(o)) {
|
if (tvisudata(o)) {
|
||||||
@ -884,8 +884,14 @@ LUALIB_API void *luaL_checkudata(lua_State *L, int idx, const char *tname)
|
|||||||
if (tv && tvistab(tv) && tabV(tv) == tabref(ud->metatable))
|
if (tv && tvistab(tv) && tabV(tv) == tabref(ud->metatable))
|
||||||
return uddata(ud);
|
return uddata(ud);
|
||||||
}
|
}
|
||||||
lj_err_argtype(L, idx, tname);
|
return NULL; /* value is not a userdata with a metatable */
|
||||||
return NULL; /* unreachable */
|
}
|
||||||
|
|
||||||
|
LUALIB_API void *luaL_checkudata(lua_State *L, int idx, const char *tname)
|
||||||
|
{
|
||||||
|
void *p = luaL_testudata(L, idx, tname);
|
||||||
|
if (!p) lj_err_argtype(L, idx, tname);
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -- Object setters ------------------------------------------------------ */
|
/* -- Object setters ------------------------------------------------------ */
|
||||||
|
Loading…
Reference in New Issue
Block a user