add api ravitype() to enable extended type information

pull/81/head
Dibyendu Majumdar 9 years ago
parent 8b4ca1648a
commit c2008d9439

@ -177,6 +177,7 @@ LUA_API int (lua_isinteger) (lua_State *L, int idx);
LUA_API int (lua_isuserdata) (lua_State *L, int idx);
LUA_API int (lua_type) (lua_State *L, int idx);
LUA_API const char *(lua_typename) (lua_State *L, int tp);
LUA_API const char * (ravi_typename) (lua_State *L, int idx);
LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum);
LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum);

@ -260,6 +260,35 @@ LUA_API const char *lua_typename (lua_State *L, int t) {
return ttypename(t);
}
/*
Ravi extension
*/
LUA_API const char *ravi_typename(lua_State *L, int idx) {
StkId o = index2addr(L, idx);
switch (rttype(o)) {
case LUA_TNIL: return "nil";
case LUA_TBOOLEAN: return "boolean";
case LUA_TNUMFLT: return "number";
case LUA_TNUMINT: return "integer";
case ctb(LUA_TLNGSTR): return "string";
case ctb(LUA_TSHRSTR): return "string";
case ctb(LUA_TUSERDATA): return "userdata";
case LUA_TLIGHTUSERDATA: return "lightuserdata";
case LUA_TLCF: return "lightCfunction";
case ctb(LUA_TCCL): return "Cclosure";
case ctb(LUA_TLCL): return "closure";
case ctb(LUA_TTHREAD): return "thread";
case ctb(LUA_TTABLE): {
Table *h = hvalue(o);
switch (h->ravi_array.array_type) {
case RAVI_TARRAYFLT: return "number[]";
case RAVI_TARRAYINT: return "integer[]";
default: return "table";
}
}
default: return "unknown";
}
}
LUA_API int lua_iscfunction (lua_State *L, int idx) {
StkId o = index2addr(L, idx);

@ -207,6 +207,14 @@ static int luaB_type (lua_State *L) {
return 1;
}
/*
** TODO make type names upvalues
*/
static int luaB_ravitype(lua_State *L) {
luaL_checkany(L, 1);
lua_pushstring(L, ravi_typename(L, 1));
return 1;
}
static int pairsmeta (lua_State *L, const char *method, int iszero,
lua_CFunction iter) {
@ -491,6 +499,7 @@ static const luaL_Reg base_funcs[] = {
{"tonumber", luaB_tonumber},
{"tostring", luaB_tostring},
{"xpcall", luaB_xpcall},
{"ravitype", luaB_ravitype},
/* placeholders */
{"type", NULL},
{"_G", NULL},

Loading…
Cancel
Save