Skip to main content

luaur_compiler/methods/
compiler_get_jump_op_compare.rs

1use crate::records::compiler::Compiler;
2use luaur_ast::records::ast_expr_binary::AstExprBinaryOp;
3use luaur_common::enums::luau_opcode::LuauOpcode;
4use luaur_common::macros::luau_assert::LUAU_ASSERT;
5
6impl Compiler {
7    pub fn get_jump_op_compare(&mut self, op: AstExprBinaryOp, not_: bool) -> LuauOpcode {
8        match op {
9            AstExprBinaryOp::CompareNe => {
10                if not_ {
11                    LuauOpcode::LOP_JUMPIFEQ
12                } else {
13                    LuauOpcode::LOP_JUMPIFNOTEQ
14                }
15            }
16            AstExprBinaryOp::CompareEq => {
17                if not_ {
18                    LuauOpcode::LOP_JUMPIFNOTEQ
19                } else {
20                    LuauOpcode::LOP_JUMPIFEQ
21                }
22            }
23            AstExprBinaryOp::CompareLt | AstExprBinaryOp::CompareGt => {
24                if not_ {
25                    LuauOpcode::LOP_JUMPIFNOTLT
26                } else {
27                    LuauOpcode::LOP_JUMPIFLT
28                }
29            }
30            AstExprBinaryOp::CompareLe | AstExprBinaryOp::CompareGe => {
31                if not_ {
32                    LuauOpcode::LOP_JUMPIFNOTLE
33                } else {
34                    LuauOpcode::LOP_JUMPIFLE
35                }
36            }
37            _ => {
38                LUAU_ASSERT!(false);
39                LuauOpcode::LOP_NOP
40            }
41        }
42    }
43}