Для проверки количества аргументов в стеке используется функция lua_gettop()
.
Попробуйте выполнить следующее из функции C:
lua_getfield(L, LUA_GLOBALSINDEX, "print");
lua_insert(L, 1);
lua_call(L, lua_gettop(L)-1, 0);
lua_call()
извлеките все аргументы из стека, поэтому, если вы хотите сохранить их, вам нужно будет немного изменить их, чтобы сделать копию всех аргументов.
int args=lua_gettop(L);
if(lua_checkstack(L, args+1))
{
int i;
lua_getfield(L, LUA_GLOBALSINDEX, "print");
for(i=1;i<=args;i++)
lua_pushvalue(L, i);
lua_call(L, args, 0);
}
else
{
return luaL_error(L, "cannot grow stack");
}