Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }
Exemple #6
0
        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!");
            }
        }
Exemple #7
0
        public void Execute(LuaVm vm)
        {
            var action = OpCodes.opcodes[Opcode()].action;

            if (action != null)
            {
                action(this, vm);
            }
            else
            {
                throw new Exception(OpName());
            }
        }
Exemple #8
0
        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);
        }
Exemple #9
0
        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);
        }
Exemple #10
0
        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);
            }
        }