lemonlang 0.0.3

an experimental, modern, purely safe, programming language.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::{ir::IrBasicValue, report::throw_llvm_error};

use super::Llvm;

impl Llvm<'_> {
	pub fn llvm_compile_drop(&mut self, ptr_value: &IrBasicValue) {
		let free_function = self.get_free_function();

		let ptr = self.env.get_ptr_value(ptr_value.value.as_str()).unwrap_or_else(|| {
			throw_llvm_error(format!("not found pointer value for {}", ptr_value.value.as_str()))
		});

		let temp = self.env.get_temp();
		#[rustfmt::skip]
		self.builder.build_call(free_function, &[ptr.into()], &temp)
			.unwrap_or_else(|err| throw_llvm_error(format!("failed to free pointer: {}", err)));
	}
}