vicis_core/ir/module/metadata/
mod.rs1pub mod parser;
2
3pub use parser::operand as parse_operand;
4pub use parser::parse;
5
6use crate::ir::{module::name::Name, value::ConstantInt};
7use std::fmt;
8
9#[derive(PartialEq, Clone)]
10pub enum Metadata {
11 String(String),
12 Name(Name),
13 Int(ConstantInt),
14 Node(Vec<Self>),
15}
16
17impl fmt::Debug for Metadata {
22 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
23 fn fmt_int(i: &ConstantInt, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match i {
26 ConstantInt::Int1(_) => write!(f, "i1 "),
27 ConstantInt::Int8(_) => write!(f, "i8 "),
28 ConstantInt::Int32(_) => write!(f, "i32 "),
29 ConstantInt::Int64(_) => write!(f, "i64 "),
30 }?;
31 write!(f, "{}", i)
32 }
33
34 match self {
35 Self::String(s) => write!(f, "!\"{}\"", s),
36 Self::Name(n) => write!(f, "!{}", n),
37 Self::Int(i) => fmt_int(i, f),
38 Self::Node(list) => {
39 write!(f, "!{{")?;
40 for (k, m) in list.iter().enumerate() {
41 if k == 0 {
42 write!(f, "{:?}", m)?;
43 } else {
44 write!(f, ", {:?}", m)?;
45 }
46 }
47 write!(f, "}}")
48 }
49 }
50 }
51}