internal static void setList(Instruction i, LuaVm vm) { var abc = i.ABC(); var a = abc.Item1; var b = abc.Item2; var c = abc.Item3; a += 1; if (c > 0) { c = c - 1; } else { c = new Instruction(vm.Fetch()).Ax(); } var idx = (long)c * LFIELDS_PER_FLUSH; for (var j = 1; j <= b; j++) { idx++; vm.PushValue(a + j); vm.SetI(a, idx); } }
internal static void move(Instruction i, LuaVm vm) { var ab_ = i.ABC(); var a = ab_.Item1 + 1; var b = ab_.Item2; vm.Copy(b, a); }
internal static void loadKx(Instruction i, LuaVm vm) { var aBx = i.ABx(); var a = aBx.Item1 + 1; var ax = new Instruction(vm.Fetch()).Ax(); vm.GetConst(ax); vm.Replace(a); }
internal static void loadK(Instruction i, LuaVm vm) { var aBx = i.ABx(); var a = aBx.Item1 + 1; var bx = aBx.Item2; vm.GetConst(bx); vm.Replace(a); }
internal static void newTable(Instruction i, LuaVm vm) { var abc = i.ABC(); var a = abc.Item1; var b = abc.Item2; var c = abc.Item3; a += 1; vm.CreateTable(Fpb.Fb2int(b), Fpb.Fb2int(c)); vm.Replace(a); }
internal static void jmp(Instruction i, LuaVm vm) { var asBx = i.AsBx(); var a = asBx.Item1; var sBx = asBx.Item2; vm.AddPC(sBx); if (a != 0) { throw new Exception("todo!"); } }
public void Execute(LuaVm vm) { var action = OpCodes.opcodes[Opcode()].action; if (action != null) { action(this, vm); } else { throw new Exception(OpName()); } }
internal static void setTable(Instruction i, LuaVm vm) { var abc = i.ABC(); var a = abc.Item1; var b = abc.Item2; var c = abc.Item3; a += 1; vm.GetRK(b); vm.GetRK(c); vm.SetTable(a); }
internal static void loadNil(Instruction i, 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); }
internal static void loadBool(Instruction i, LuaVm vm) { var abc = i.ABC(); var a = abc.Item1 + 1; var b = abc.Item2; var c = abc.Item3; vm.PushBoolean(b != 0); vm.Replace(a); if (c != 0) { vm.AddPC(1); } }