Esempio n. 1
0
        /// <summary>
        /// Call指令,操作数A指定被调用函数对象,如果B=1,表示没有参数,如果B>1,表示有B-1个参数,这些参数从寄存器R(A+1)开始。
        /// 函数调用完之后,如果C=1,表示没有返回值,如果C>1,表示需要C-1个返回值,这些返回值会存到寄存器R(A)和它后面。
        /// B=0时,参数从R(A+1)一直到栈顶;C=0时,返回值从R(A)一直到栈顶。
        /// </summary>
        /// <param name="i"></param>
        public void Call(Instruction i)
        {
            int a = 0, b = 0, c = 0;

            i.ABC(ref a, ref b, ref c);
            a += 1;
            int nArg = PushArgAndFunc(a, b);

            luaState.Call(nArg, c - 1);
            RunLuaClosure();
            var results = luaState.GetReturnValue(c - 1);

            luaState.PopLuaStack();
            if (results != null)
            {
                luaState.PushN(results, results.Length);
            }
        }