luaのグローバル変数・関数を調べる
テーブルをたどるのがうまく出来ない
- test.c
#include "lua.h" #include "lualib.h" #include "lauxlib.h" void check_table(lua_State *L, int index, int indent) { lua_pushnil(L); while (lua_next(L, index) != 0) { printf("%s - %s ", lua_tostring(L, -2), lua_typename(L, lua_type(L, -1))); switch (lua_type(L, -1)) { case LUA_TNUMBER: printf(": %g\n", lua_tonumber(L, -1)); break; case LUA_TBOOLEAN: printf(": %d\n", lua_toboolean(L, -1)); break; case LUA_TSTRING: printf(": %s\n", lua_tostring(L, -1)); break; #if 0 case LUA_TTABLE: printf(": \n"); check_table(L, lua_gettop(L), indent+1); break; #endif default: printf("\n"); break; } lua_pop(L, 1); } lua_pop(L, 1); } void check_all_global(lua_State *L) { lua_getfenv(L, LUA_GLOBALSINDEX); check_table(L, lua_gettop(L), 0); } int main(int argc,char* argv[]) { double v; lua_State *L=lua_open(); lua_dofile(L, "a.lua"); check_all_global(L); return 0; }
- test.lua
a = {45} function b() end