/// <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); } }