internal static void TForCall(Instruction i, ref LuaVM vm) { var(a, _, c) = i.ABC(); a += 1; PushFuncAndArgs(a, 3, ref vm); vm.Call(2, c); PopResults(a + 3, c + 1, ref vm); }
// R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) internal static void call(Instruction i, ref LuaVM vm) { var(a, b, c) = i.ABC(); a += 1; // println(":::"+ vm.StackToString()) var nArgs = pushFuncAndArgs(a, b, ref vm); vm.Call(nArgs, c - 1); popResults(a, c, vm); }
// return R(A)(R(A+1), ... ,R(A+B-1)) internal static void TailCall(Instruction i, ref LuaVM vm) { var(a, b, _) = i.ABC(); a += 1; // todo: optimize tail call! var c = 0; var nArgs = PushFuncAndArgs(a, b, ref vm); vm.Call(nArgs, c - 1); PopResults(a, c, ref vm); }
// return R(A)(R(A+1), ... ,R(A+B-1)) internal static void tailCall(Instruction i, ref LuaVM vm) { var ab_ = i.ABC(); var a = ab_.Item1 + 1; var b = ab_.Item2; // todo: optimize tail call! var c = 0; var nArgs = pushFuncAndArgs(a, b, ref vm); vm.Call(nArgs, c - 1); popResults(a, c, vm); }
// R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1)) internal static void call(Instruction i, ref LuaVM vm) { var abc = i.ABC(); var a = abc.Item1 + 1; var b = abc.Item2; var c = abc.Item3; // println(":::"+ vm.StackToString()) var nArgs = _pushFuncAndArgs(a, b, ref vm); vm.Call(nArgs, c - 1); _popResults(a, c, ref vm); }