internal static void getTabUp(Instruction i, ref LuaVM vm) { var a_c = i.ABC(); var a = a_c.Item1 + 1; var c = a_c.Item3; vm.PushGlobalTable(); vm.GetRK(c); vm.GetTable(-2); vm.Replace(a); vm.Pop(1); }
internal static void loadNil(Instruction i, ref LuaVM vm) { var(a, b) = i.AsBx(); a += 1; vm.PushNil(); for (var l = a; l <= a + b; l++) { vm.Copy(-1, l); } vm.Pop(1); }
static void fixStack(int a, LuaVM vm) { int x = (int)vm.ToInteger(-1); vm.Pop(1); vm.CheckStack(x - a); for (int i = a; i < x; i++) { vm.PushValue(i); } vm.Rotate(vm.RegisterCount() + 1, x - a); }
internal static void LoadNil(Instruction i, ref LuaVM vm) { var(a, b, _) = i.ABC(); a += 1; vm.PushNil(); for (var j = a; j <= a + b; j++) { vm.Copy(-1, j); } vm.Pop(1); }
internal static void loadNil(Instruction i, ref LuaVM vm) { var ab_ = i.AsBx(); var a = ab_.Item1 + 1; var b = ab_.Item2; vm.PushNil(); for (var l = a; l <= a + b; l++) { vm.Copy(-1, l); } vm.Pop(1); }
private static void Compare(Instruction i, ref LuaVM vm, CompareOp op) { var(a, b, c) = i.ABC(); vm.GetRK(b); vm.GetRK(c); var br = vm.Compare(-2, -1, op) != (a != 0); if (br) { vm.AddPC(1); } vm.Pop(2); }
internal static void _compare(Instruction i, ref LuaVM vm, CompareOp op) { var abc = i.ABC(); var a = abc.Item1; var b = abc.Item2; var c = abc.Item3; vm.GetRK(b); vm.GetRK(c); if (vm.Compare(-2, -1, op) != (a != 0)) { vm.AddPC(1); } vm.Pop(2); }
internal static void setList(Instruction i, ref LuaVM vm) { var abc = i.ABC(); var a = abc.Item1 + 1; var b = abc.Item2; var c = abc.Item3; if (c > 0) { c = c - 1; } else { c = new Instruction(vm.Fetch()).Ax(); } var bIsZero = b == 0; if (bIsZero) { b = (int)vm.ToInteger(-1) - a - 1; vm.Pop(1); } vm.CheckStack(1); var idx = (long)(c * LFIELDS_PER_FLUSH); for (var j = 1; j <= b; j++) { idx++; vm.PushValue(a + j); vm.SetI(a, idx); } if (bIsZero) { for (var j = vm.RegisterCount() + 1; j <= vm.GetTop(); j++) { idx++; vm.PushValue(j); vm.SetI(a, idx); } // clear stack vm.SetTop(vm.RegisterCount()); } }