Implements the `Call` opcode.
(&mut self, instr: u32)
| 676 | |
| 677 | /// Implements the `Call` opcode. |
| 678 | pub(super) fn do_call(&mut self, instr: u32) { |
| 679 | let (reg, offset) = bytecode::parse_call(instr); |
| 680 | if !self.push_frame(Frame { old_pc: self.pc, old_fp: self.fp, ret_reg: Some(reg) }) { |
| 681 | return; |
| 682 | } |
| 683 | self.pc = Address::from(offset); |
| 684 | let (is_global, index) = reg.to_parts(); |
| 685 | debug_assert!(!is_global, "Function results are always stored to a temp register"); |
| 686 | self.fp += usize::from(index); |
| 687 | } |
| 688 | |
| 689 | /// Implements the `Concat` opcode. |
| 690 | pub(super) fn do_concat(&mut self, instr: u32, constants: &[ConstantDatum], heap: &mut Heap) { |
no test coverage detected