luaur_bytecode/methods/
bytecode_graph_serializer_patch_jump.rs1use crate::records::bc_block::BcBlock;
2use crate::records::bytecode_graph_serializer::BytecodeGraphSerializer;
3use crate::records::jump_info::JumpInfo;
4use luaur_common::functions::is_jump_d::isJumpD;
5use luaur_common::functions::is_skip_c::isSkipC;
6use luaur_common::macros::luau_assert::LUAU_ASSERT;
7
8impl<'a> BytecodeGraphSerializer<'a> {
9 pub fn patch_jump(&mut self, jump: &JumpInfo) {
10 let target = self.func.block_op(jump.targetBlock);
11 LUAU_ASSERT!(target.startpc != BcBlock::K_BLOCK_NO_START_PC);
12
13 if isJumpD(jump.op) {
14 let patched = self
15 .bcb
16 .patch_jump_d(jump.instructionPC as usize, target.startpc as usize);
17 LUAU_ASSERT!(patched);
18 } else if isSkipC(jump.op) {
19 let patched = self
20 .bcb
21 .patch_skip_c(jump.instructionPC as usize, target.startpc as usize);
22 LUAU_ASSERT!(patched);
23 }
24 }
25}