int luaL_pcall( lua_State *L, int f, int nargs) /* f arg1 arg2 ... argn */
{
int base = lua_gettop( L) - nargs; /* arg1 arg2 ... argn */
switch (f)
{
default: if (!lua_isfunction( L, f)) break;
{
lua_pushvalue( L, f);
lua_insert( L, base);
} lua_pop( L, 1);
case 0 : lua_pushliteral( L, "_TRACEBACK");
lua_rawget( L, LUA_GLOBALSINDEX); {
lua_insert( L, base); /* _T f arg1 arg2 ... argn */
f = lua_pcall( L, nargs, LUA_MULTRET, base);
} lua_remove( L, base--);
if (f == 0) return lua_gettop( L) - base;
} fprintf( stderr, "** luaL_call(%d args): %s\n",
nargs, lua_tostring( L, -1) ?: "(error with no message)");
lua_settop( L, base);
return -1;
}
int luaL_call( lua_State *L, const char *fname, int nargs)
{
luaL_getfield( L, LUA_GLOBALSINDEX, fname);
return luaL_pcall( L, -1, nargs);
}
luaL_getfield()라는 함수는 원래 lua 5.0에서는 존재하지 않다가 5.1로 넘어오면서 생긴 아주 유용한
함수로, 예전에는 필자가 만들어 사용했었다~
이 함수의 역활은 함수명이 a.b.c인 함수를 호출할 경우 c함수의 위치를 찾아 주는 함수이다.
참고가 되었길~