コード例 #1
0
ファイル: InstUpvalue.cs プロジェクト: 583004700/IdeaProjects
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
ファイル: InstLoad.cs プロジェクト: 583004700/IdeaProjects
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
ファイル: InstTable.cs プロジェクト: 583004700/IdeaProjects
        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());
            }
        }