コード例 #1
0
ファイル: LuaVM.cs プロジェクト: xiaoxiaofish/LuaVM
        /// <summary>
        /// 跳转到指定指令处,由bx指定
        /// </summary>
        /// <param name="i"></param>
        public void JMP(Instruction i)
        {
            int a = 0, bx = 0;

            i.ASBX(ref a, ref bx);
            luaState.AddPC(bx);
            if (a != 0)
            {
            }
        }
コード例 #2
0
ファイル: LuaVM.cs プロジェクト: xiaoxiaofish/LuaVM
        /// <summary>
        ///
        /// </summary>
        public void ForPrep(Instruction i)
        {
            int a = 0, sbx = 0;

            i.ASBX(ref a, ref sbx);
            luaState.PushValueFromIndex(a + 3);
            luaState.PushValueFromIndex(a + 1);
            luaState.MathOperation(TokenType.Minus);
            luaState.Replace(a + 1);
            luaState.AddPC(sbx);
        }
コード例 #3
0
ファイル: LuaVM.cs プロジェクト: xiaoxiaofish/LuaVM
        /// <summary>
        /// 数值for循环指令,
        /// </summary>
        /// <param name="i"></param>
        public void ForLoop(Instruction i)
        {
            int a = 0, sbx = 0;

            i.ASBX(ref a, ref sbx);
            luaState.PushValueFromIndex(a + 3);
            luaState.PushValueFromIndex(a + 1);
            luaState.MathOperation(TokenType.Plus);
            luaState.Replace(a + 1);
            bool isPositionStep = luaState.ToNumber(a + 2) >= 0;

            if (isPositionStep && (bool)luaState.Compare(a, a + 1, TokenType.SmallerEqual).OValue || !isPositionStep && (bool)luaState.Compare(a + 1, a, TokenType.SmallerEqual).OValue)
            {
                luaState.AddPC(sbx);
                luaState.CopyTo(a + 1, a + 4);
            }
        }