lua_pushvalue(L, 1); /* state, */ if (iszero) lua_pushinteger(L, 0); /* and initial value */ else lua_pushnil(L); // 在堆栈上放入变量var的值,也就是nil。 } else { lua_pushvalue(L, 1); /* argument 'self' to metamethod */ lua_call(L, 1, 3); /* get 3 values from...
int iLen = lua_objlen(L, 1); for (int i = 1; i <= iLen; ++i) { // 将用户定义的函数压入栈 lua_pushvalue(L, 2); // 将参数table的所以i对应的值压入栈 lua_rawgeti(L, 1, i); // 调用用户定义的函数 lua_call(L, 1, 1); lua_rawseti(L, 1, i); } // 没有返回值压入...
lua_pushvalue(L, -1); /* void lua_replace (lua_State *L, int index); 把栈顶元素放置到给定位置而不移动其它元素(因此覆盖了那个位置处的值),然后将栈顶元素弹出 */ lua_replace(L, lua_upvalueindex(1)); return 1; /* return new value */ } static int counter (lua_State *L) { lua_...
lua_pushvalue(L, 1); /* state, */ if (iszero) lua_pushinteger(L, 0); /* and initial value */ else lua_pushnil(L); // 在堆栈上放入变量var的值,也就是nil。 } else { lua_pushvalue(L, 1); /* argument 'self' to metamethod */ lua_call(L, 1, 3); /* get 3 values from...
lua_pushvalue(L, -1); // 这里强制增加引用, 如果不手动解引用, UObject不会释放. int32 ObjectRef = luaL_ref(L, LUA_REGISTRYINDEX); // keep a reference for 'INSTANCE' FUnLuaDelegates::OnObjectBinded.Broadcast(Object); // 'INSTANCE' is on the top of stack now ...
pushValue(l,true); pushValue(l,ret); return 2; } //此处省略另一个重载接口 pushValue(l,false); LuaDLL.lua_pushstring(l,"No matched override function to call"); return 2; } catch(Exception e) { return error(l,e); } } 我们注意到,这一函数只需要一个返回值的,但是SLua往栈里pushValue...
int openUILib(lua_State* L) { luaL_newmetatable(L, "Widget"); lua_pushvalue(L, -1); lua_setfield(L, -1, "__index"); // widget.__index = widget luaL_setfuncs(L, regWidgetMethods, 0); // 设置元表的方法 luaL_newlib(L, regUIMethods); // 将两个创建函数设置到创建的全局模块UI...
if(luaL_findtable(L,LUA_GLOBALSINDEX,libname,size)!=NULL)luaL_error(L,"name conflict for module "LUA_QS,libname);// 创建指定名称的表的拷贝lua_pushvalue(L,-1);// 设置Load[libname] = 新表。// lua_setfield 设置完毕栈顶元素出栈lua_setfield(L,-3,libname);/* _LOADED[libname] = new ...
lua_pushvalue(L, 1); } lua_setfield(L, LUA_REGISTRYINDEX, f); } /* return current value */ lua_getfield(L, LUA_REGISTRYINDEX, f); return 1; } static int io_input (lua_State *L) { return g_iofile(L, IO_INPUT, "r"); } static int io_output (lua_State *...
void lua_pushvalue (lua_State *L, int index); 拷贝栈中指定索引处的元素并压入栈中 void lua_rotate (lua_State *L, int index, int n); 把从index 开始到栈顶的元素轮转 n 个位置。 对于 n 为正数时,轮转方向是向栈顶的; 当 n 为负数时,向栈底方向轮转 n 个位置 ...