void lua_next (void) { Hash *t; lua_Object o = lua_getparam(1); lua_Object r = lua_getparam(2); luaL_arg_check(lua_istable(o), 1, "table expected"); luaL_arg_check(r != LUA_NOOBJECT, 2, "value expected"); t = avalue(luaI_Address(o)); if (lua_isnil(r)) hashnext(t, 0); else hashnext(t, present(t, luaI_Address(r))+1); }
/* ** Internal function: print object values */ void lua_print (void) { int i=1; lua_Object obj; while ((obj=lua_getparam (i++)) != LUA_NOOBJECT) { if (lua_isnumber(obj)) printf("%g\n",lua_getnumber(obj)); else if (lua_isstring(obj)) printf("%s\n",lua_getstring(obj)); else if (lua_isfunction(obj)) printf("function: %p\n",bvalue(luaI_Address(obj))); else if (lua_iscfunction(obj)) printf("cfunction: %p\n",lua_getcfunction(obj) ); else if (lua_isuserdata(obj)) printf("userdata: %p\n",lua_getuserdata(obj)); else if (lua_istable(obj)) printf("table: %p\n",avalue(luaI_Address(obj))); else if (lua_isnil(obj)) printf("nil\n"); else printf("invalid value to print\n"); } }
char *lua_getobjname (lua_Object o, char **name) { /* try to find a name for given function */ functofind = luaI_Address(o); if ((*name = luaI_travfallbacks(checkfunc)) != NULL) return "fallback"; else if ((*name = lua_travsymbol(checkfunc)) != NULL) return "global"; else return ""; }
void lua_next (void) { Hash *t; lua_Object o = lua_getparam(1); lua_Object r = lua_getparam(2); if (o == LUA_NOOBJECT || r == LUA_NOOBJECT) lua_error ("too few arguments to function `next'"); if (lua_getparam(3) != LUA_NOOBJECT) lua_error ("too many arguments to function `next'"); if (!lua_istable(o)) lua_error ("first argument of function `next' is not a table"); t = avalue(luaI_Address(o)); if (lua_isnil(r)) { hashnext(t, 0); } else { int h = present (t, luaI_Address(r)); hashnext(t, h+1); } }
lua_Object lua_getlocal (lua_Function func, int local_number, char **name) { Object *f = luaI_Address(func); *name = luaI_getlocalname(f->value.tf, local_number, lua_currentline(func)); if (*name) { /* if "*name", there must be a LUA_T_LINE */ /* therefore, f+2 points to function base */ return Ref((f+2)+(local_number-1)); } else return LUA_NOOBJECT; }
void luaI_setfallback (void) { int i; char *name = lua_getstring(lua_getparam(1)); lua_Object func = lua_getparam(2); if (name == NULL || !(lua_isfunction(func) || lua_iscfunction(func))) lua_error("incorrect argument to function `setfallback'"); for (i=0; i<N_FB; i++) { if (strcmp(luaI_fallBacks[i].kind, name) == 0) { luaI_pushobject(&luaI_fallBacks[i].function); luaI_fallBacks[i].function = *luaI_Address(func); return; } } /* name not found */ lua_error("incorrect argument to function `setfallback'"); }