1use neige_infra::{LuaArith, LuaCompare};
2
3use crate::{
4 api::{ArithApi, CompareApi, LuaVm, StackApi},
5 state::LuaState,
6};
7
8use super::utils::{u16_isize, u8_isize};
9
10impl LuaState {
11 pub(super) fn inline_compare(&mut self, op: LuaCompare, a: &u8, b: &u16, c: &u16) {
12 let a = u8_isize(a);
13 let b = u16_isize(b);
14 let c = u16_isize(c);
15 self.get_rk(b);
16 self.get_rk(c);
17 if self.compare(-2, -1, op) != (a != 0) {
18 self.add_pc(1)
19 }
20 self.pop(2)
21 }
22
23 pub(super) fn binary_arith(&mut self, op: LuaArith, a: &u8, b: &u16, c: &u16) {
24 let a = u8_isize(a) + 1;
25 let b = u16_isize(b);
26 let c = u16_isize(c);
27 self.get_rk(b);
28 self.get_rk(c);
29 self.arith(op);
30 self.replace(a);
31 }
32
33 pub(super) fn unary_arith(&mut self, op: LuaArith, a: &u8, b: &u16) {
34 let a = u8_isize(a) + 1;
35 let b = u16_isize(b) + 1;
36 self.push_value(b);
37 self.arith(op);
38 self.replace(a);
39 }
40}