Skip to main content

luaur_compiler/methods/
compiler_patch_loop_jumps.rs

1use crate::enums::type_compiler::Type;
2use crate::records::compiler::Compiler;
3use crate::records::loop_jump::LoopJump;
4use luaur_ast::records::ast_node::AstNode;
5use luaur_common::macros::luau_assert::LUAU_ASSERT;
6
7impl Compiler {
8    pub fn patch_loop_jumps(
9        &mut self,
10        node: *mut AstNode,
11        old_jumps: usize,
12        end_label: usize,
13        cont_label: usize,
14    ) {
15        LUAU_ASSERT!(old_jumps <= self.loop_jumps.len());
16
17        for i in old_jumps..self.loop_jumps.len() {
18            let lj: &LoopJump = &self.loop_jumps[i];
19
20            match lj.r#type {
21                Type::Break => {
22                    self.patch_jump(node, lj.label, end_label);
23                }
24                Type::Continue => {
25                    self.patch_jump(node, lj.label, cont_label);
26                }
27                _ => {
28                    LUAU_ASSERT!(!true);
29                }
30            }
31        }
32    }
33}