llvm-scratch 0.1.15

Free Standing library in Rust
Documentation
use crate::core::{
    instruction,
    llvm_type,
    llvm_value,
};
use std::fmt;
use std::fmt::Formatter;

#[derive(Eq, PartialEq, PartialOrd, Ord, Hash)]
pub struct GlobalVariable {
    linkage: Option<instruction::Linkage>,
    unnamed_addr: bool,
    constant: bool,
    ty: llvm_type::LLVMType,
    initializer: Option<llvm_value::LLVMValue>,
    align: Option<u32>,
}

impl GlobalVariable {
    pub fn new(
        linkage: Option<instruction::Linkage>,
        unnamed_addr: bool,
        constant: bool,
        ty: llvm_type::LLVMType,
        initializer: Option<llvm_value::LLVMValue>,
        align: Option<u32>,
    ) -> Self {
        Self {
            linkage,
            unnamed_addr,
            constant,
            ty,
            initializer,
            align,
        }
    }
}

impl fmt::Display for GlobalVariable{
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        if let Some(linkage) = &self.linkage {
            write!(f, "{} ", linkage)?;
        }

        if self.unnamed_addr{
            write!(f, "unnamed_addr ")?;
        } else{
            write!(f, "local_unnamed_addr ")?;
        }

        if self.constant{
            write!(f, "constant ")?;
        } else{
            write!(f, "global ")?;
        }

        write!(f, "{} ", self.ty)?;

        if let Some(initializer) = &self.initializer{
            write!(f, "{} ", initializer)?;
        }

        if let Some(align) = &self.align{
            write!(f, "{} ", align)?;
        }
        Ok(())
    }
}