oxilean_codegen/llvm_backend/
llvmfunc_traits.rs1use crate::lcnf::*;
12
13use super::types::{LlvmFunc, LlvmLinkage};
14use std::fmt;
15
16impl fmt::Display for LlvmFunc {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 if self.is_declare {
19 write!(f, "declare")?;
20 } else {
21 write!(f, "define")?;
22 }
23 if self.linkage != LlvmLinkage::External {
24 write!(f, " {}", self.linkage)?;
25 }
26 write!(f, " {} @{}(", self.ret_ty, self.name)?;
27 for (i, (ty, name)) in self.params.iter().enumerate() {
28 if i > 0 {
29 write!(f, ", ")?;
30 }
31 if self.is_declare {
32 write!(f, "{}", ty)?;
33 } else {
34 write!(f, "{} %{}", ty, name)?;
35 }
36 }
37 write!(f, ")")?;
38 for attr in &self.attrs {
39 write!(f, " {}", attr)?;
40 }
41 if self.is_declare {
42 writeln!(f)?;
43 } else {
44 writeln!(f, " {{")?;
45 for instr in &self.body {
46 writeln!(f, "{}", instr)?;
47 }
48 writeln!(f, "}}")?;
49 }
50 Ok(())
51 }
52}