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;
}
a = {45}
function b()
end