luaur_code_gen/functions/
translate_builtin_assert.rs1use crate::enums::builtin_impl_type::BuiltinImplType;
2use crate::enums::ir_cmd::IrCmd;
3use crate::records::builtin_impl_result::BuiltinImplResult;
4use crate::records::ir_builder::IrBuilder;
5use crate::records::ir_op::IrOp;
6
7pub fn translate_builtin_assert(
8 build: &mut IrBuilder,
9 nparams: i32,
10 _ra: i32,
11 arg: i32,
12 _args: IrOp,
13 nresults: i32,
14 pcpos: i32,
15) -> BuiltinImplResult {
16 if nparams < 1 || nresults != 0 {
17 return BuiltinImplResult {
18 r#type: BuiltinImplType::None,
19 actual_result_count: -1,
20 };
21 }
22
23 let arg_reg = build.vm_reg(arg as u8);
24 let tag = build.inst_ir_cmd_ir_op(IrCmd::LOAD_TAG, arg_reg);
25
26 let arg_reg = build.vm_reg(arg as u8);
27 let value = build.inst_ir_cmd_ir_op(IrCmd::LOAD_INT, arg_reg);
28
29 let exit_op = build.vm_exit(pcpos as u32);
30 build.inst_ir_cmd_ir_op_ir_op_ir_op(IrCmd::CHECK_TRUTHY, tag, value, exit_op);
31
32 BuiltinImplResult {
33 r#type: BuiltinImplType::UsesFallback,
34 actual_result_count: 0,
35 }
36}