lemonlang 0.0.3

an experimental, modern, purely safe, programming language.
use inkwell::values::BasicValueEnum;

use crate::{
	ir::{self},
	report::throw_llvm_error,
};

use super::Llvm;
type Binds = Vec<(ir::Register, ir::Bind)>;
type Fields<'ll> = Vec<Option<BasicValueEnum<'ll>>>;

impl<'ll> Llvm<'ll> {
	pub fn fill_struct_values(&mut self, name: &str, binds: &Binds, fields: &mut Fields<'ll>) {
		for (ref_register, bind_value) in binds {
			#[rustfmt::skip]
			let position = self.stack.get_struct_field(name, *ref_register).unwrap_or_else(|| {
				let error = format!("field '{}' not found", ref_register.as_string());
				throw_llvm_error(error)
			});

			let value = self.get_value_or_load(bind_value.register, bind_value.type_id);
			fields[position] = Some(value);
		}
	}
}