public static void SetSearcher(IntPtr L, LuaCSFunction loader) { int top = LuaDLL.lua_gettop(L); LuaDLL.wlua_getglobal(L, "package"); //package LuaDLL.wlua_getfield(L, -1, "searchers"); //package,searchers LuaDLL.wlua_getglobal(L, "cswrapfunc"); //package,searchers,wrap LuaDLL.wLua_wrapfunction(L, -1, loader); //package,searchers,wrap,loader LuaDLL.wlua_pushcclosure(L, LuaFuncs.searcher, 1); //package,searchers,wrap,searcher LuaDLL.lua_remove(L, -2); //package,searchers,searcher int searchersIndex = LuaDLL.lua_gettop(L) - 1; for (int e = (int)LuaDLL.lua_rawlen(L, searchersIndex) + 1; e > 1; e--) { LuaDLL.lua_rawgeti(L, searchersIndex, e - 1); //package,searchers,searcher,value LuaDLL.lua_rawseti(L, searchersIndex, e); //package,searchers,searcher } LuaDLL.lua_rawseti(L, searchersIndex, 1); //package,searchers LuaDLL.lua_settop(L, top); }