Skip to main content

luaur_bytecode/methods/
call_inliner_fill_under_call_arguments.rs

1use crate::records::bc_function::VmConst;
2use crate::records::bc_load_nil::BcLoadNil;
3use crate::records::call_inliner::CallInliner;
4use crate::type_aliases::reg::Reg;
5
6impl<'a> CallInliner<'a> {
7    pub fn fill_under_call_arguments(&mut self) {
8        if self.call_params.len() as u8 >= self.target.numparams {
9            return;
10        }
11
12        let inline_entry_block = self.map_block_op(self.target.entry_block);
13        let call_param_size = self.call_params.len() as u8;
14        self.call_params
15            .resize(self.target.numparams as usize, Default::default());
16
17        for param in (call_param_size..self.target.numparams).rev() {
18            let mut load_nil = BcLoadNil::<VmConst>::create(self.caller);
19            load_nil.set_out_reg(self.target_reg + 1 + param);
20            load_nil.prepend_to(inline_entry_block);
21            self.call_params[param as usize] = load_nil.op();
22        }
23    }
24}