/// <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) { } }
/// <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); }
/// <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); } }