Skip to main content

luaur_code_gen/functions/
jump_if_truthy.rs

1use crate::enums::condition_x_64::ConditionX64;
2use crate::functions::jump_if_tag_is::jump_if_tag_is;
3use crate::functions::jump_if_tag_is_not::jump_if_tag_is_not;
4use crate::functions::luau_reg_value_int::luau_reg_value_int;
5use crate::records::assembly_builder_x_64::AssemblyBuilderX64;
6use crate::records::label::Label;
7use luaur_vm::enums::lua_type::lua_Type;
8
9pub fn jump_if_truthy(
10    build: &mut AssemblyBuilderX64,
11    ri: i32,
12    target: &mut Label,
13    fallthrough: &mut Label,
14) {
15    jump_if_tag_is(build, ri, lua_Type::LUA_TNIL, fallthrough); // false if nil
16    jump_if_tag_is_not(build, ri, lua_Type::LUA_TBOOLEAN, target); // true if not nil or boolean
17
18    build.cmp(luau_reg_value_int(ri), 0.into());
19    build.jcc(ConditionX64::NotEqual, target); // true if boolean value is 'true'
20}