Skip to main content

luaur_compiler/methods/
cost_visitor_loop.rs

1use crate::records::cost::Cost;
2use crate::records::cost_visitor::CostVisitor;
3use luaur_ast::records::ast_stat_block::AstStatBlock;
4
5impl CostVisitor {
6    pub fn loop_item(&mut self, body: *mut AstStatBlock, iter_cost: Cost, factor: i32) {
7        let before = self.result;
8
9        self.result = Cost::default();
10
11        unsafe {
12            if !body.is_null() {
13                self.visit_ast_stat_block(body as *mut core::ffi::c_void);
14            }
15        }
16
17        self.result =
18            before.operator_add(&self.result.operator_add(&iter_cost).operator_mul(factor));
19    }
20}
21
22#[allow(dead_code)]
23pub fn cost_visitor_loop(
24    this: &mut CostVisitor,
25    body: *mut AstStatBlock,
26    iter_cost: Cost,
27    factor: i32,
28) {
29    this.loop_item(body, iter_cost, factor);
30}