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(())
}
}