//! The LLVM function declaration.

/// The LLVM function declaration.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Declaration<'ctx> {
    /// The function type.
    pub r#type: inkwell::types::FunctionType<'ctx>,
    /// The function value.
    pub value: inkwell::values::FunctionValue<'ctx>,
}

impl<'ctx> Declaration<'ctx> {
    /// A shortcut constructor.
    pub fn new(
        r#type: inkwell::types::FunctionType<'ctx>,
        value: inkwell::values::FunctionValue<'ctx>,
    ) -> Self {
        Self { r#type, value }
    }

    pub fn function_value(&self) -> inkwell::values::FunctionValue<'ctx> {
        self.value
    }
}
