llvm_scratch/core/llvm_value/
value.rs1use std::fmt;
2use std::fmt::Formatter;
3
4use crate::core::llvm_string;
5
6#[derive(Eq, PartialEq, PartialOrd, Ord, Hash, Clone)]
9pub struct LLVMValue {
10 pub kind: LLVMValueKind,
11}
12
13impl LLVMValue {
14 fn new(value_kind: LLVMValueKind) -> Self {
15 Self { kind: value_kind }
16 }
17
18 pub fn new_register(s: llvm_string::LLVMString) -> Self {
19 Self::new(LLVMValueKind::REGISTER(s))
20 }
21
22 pub fn new_integer(v: i128) -> Self {
23 Self::new(LLVMValueKind::INTEGER(v))
24 }
25
26 pub fn new_unsigned_int(v: u128) -> Self {
27 Self::new(LLVMValueKind::UNSIGNEDINTEGER(v))
28 }
29}
30
31impl fmt::Display for LLVMValue {
32 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
33 match &self.kind {
34 LLVMValueKind::REGISTER(s) => write!(f, "%{}", s),
35 LLVMValueKind::INTEGER(v) => write!(f, "{}", v),
36 LLVMValueKind::UNSIGNEDINTEGER(v) => write!(f, "{}", v),
37 }
38 }
39}
40
41#[derive(Eq, PartialEq, PartialOrd, Ord, Hash, Clone)]
43pub enum LLVMValueKind {
44 REGISTER(llvm_string::LLVMString),
45 INTEGER(i128),
46 UNSIGNEDINTEGER(u128),
47}