Skip to main content

luaur_compiler/methods/
compiler_get_binary_op_arith.rs

1use crate::records::compiler::Compiler;
2use luaur_ast::records::ast_expr_binary::AstExprBinaryOp;
3use luaur_common::enums::luau_opcode::LuauOpcode;
4
5use luaur_common::macros::luau_assert::LUAU_ASSERT;
6
7impl Compiler {
8    pub fn get_binary_op_arith(&mut self, op: AstExprBinaryOp, k: bool) -> LuauOpcode {
9        match op {
10            AstExprBinaryOp::Add => {
11                if k {
12                    LuauOpcode::LOP_ADDK
13                } else {
14                    LuauOpcode::LOP_ADD
15                }
16            }
17            AstExprBinaryOp::Sub => {
18                if k {
19                    LuauOpcode::LOP_SUBK
20                } else {
21                    LuauOpcode::LOP_SUB
22                }
23            }
24            AstExprBinaryOp::Mul => {
25                if k {
26                    LuauOpcode::LOP_MULK
27                } else {
28                    LuauOpcode::LOP_MUL
29                }
30            }
31            AstExprBinaryOp::Div => {
32                if k {
33                    LuauOpcode::LOP_DIVK
34                } else {
35                    LuauOpcode::LOP_DIV
36                }
37            }
38            AstExprBinaryOp::FloorDiv => {
39                if k {
40                    LuauOpcode::LOP_IDIVK
41                } else {
42                    LuauOpcode::LOP_IDIV
43                }
44            }
45            AstExprBinaryOp::Mod => {
46                if k {
47                    LuauOpcode::LOP_MODK
48                } else {
49                    LuauOpcode::LOP_MOD
50                }
51            }
52            AstExprBinaryOp::Pow => {
53                if k {
54                    LuauOpcode::LOP_POWK
55                } else {
56                    LuauOpcode::LOP_POW
57                }
58            }
59            _ => {
60                LUAU_ASSERT!(false);
61                LuauOpcode::LOP_NOP
62            }
63        }
64    }
65}