oxilean_codegen/swift_backend/
swiftexpr_traits.rs1use crate::lcnf::*;
12
13use super::types::SwiftExpr;
14use std::fmt;
15
16impl fmt::Display for SwiftExpr {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 match self {
19 SwiftExpr::SwiftLitExpr(lit) => write!(f, "{}", lit),
20 SwiftExpr::SwiftVar(name) => write!(f, "{}", name),
21 SwiftExpr::SwiftSelf => write!(f, "self"),
22 SwiftExpr::SwiftSuper => write!(f, "super"),
23 SwiftExpr::SwiftCall { callee, args } => {
24 write!(f, "{}(", callee)?;
25 for (i, (label, expr)) in args.iter().enumerate() {
26 if i > 0 {
27 write!(f, ", ")?;
28 }
29 if label.is_empty() {
30 write!(f, "{}", expr)?;
31 } else {
32 write!(f, "{}: {}", label, expr)?;
33 }
34 }
35 write!(f, ")")
36 }
37 SwiftExpr::SwiftBinOp { op, lhs, rhs } => {
38 write!(f, "({} {} {})", lhs, op, rhs)
39 }
40 SwiftExpr::SwiftMember(obj, field) => write!(f, "{}.{}", obj, field),
41 SwiftExpr::SwiftSubscript(arr, idx) => write!(f, "{}[{}]", arr, idx),
42 SwiftExpr::SwiftUnary(op, operand) => write!(f, "{}{}", op, operand),
43 SwiftExpr::SwiftTernary(cond, then_e, else_e) => {
44 write!(f, "({} ? {} : {})", cond, then_e, else_e)
45 }
46 SwiftExpr::SwiftOptionalChain(obj, field) => write!(f, "{}?.{}", obj, field),
47 SwiftExpr::SwiftForceUnwrap(expr) => write!(f, "{}!", expr),
48 SwiftExpr::SwiftArrayLit(elems) => {
49 write!(f, "[")?;
50 for (i, e) in elems.iter().enumerate() {
51 if i > 0 {
52 write!(f, ", ")?;
53 }
54 write!(f, "{}", e)?;
55 }
56 write!(f, "]")
57 }
58 SwiftExpr::SwiftDictLit(pairs) => {
59 if pairs.is_empty() {
60 return write!(f, "[:]");
61 }
62 write!(f, "[")?;
63 for (i, (k, v)) in pairs.iter().enumerate() {
64 if i > 0 {
65 write!(f, ", ")?;
66 }
67 write!(f, "{}: {}", k, v)?;
68 }
69 write!(f, "]")
70 }
71 SwiftExpr::SwiftTupleLit(elems) => {
72 write!(f, "(")?;
73 for (i, e) in elems.iter().enumerate() {
74 if i > 0 {
75 write!(f, ", ")?;
76 }
77 write!(f, "{}", e)?;
78 }
79 write!(f, ")")
80 }
81 SwiftExpr::SwiftAs(expr, ty) => write!(f, "({} as {})", expr, ty),
82 SwiftExpr::SwiftTry(expr) => write!(f, "try {}", expr),
83 SwiftExpr::SwiftAwait(expr) => write!(f, "await {}", expr),
84 SwiftExpr::SwiftClosure {
85 params,
86 return_type,
87 body,
88 } => {
89 write!(f, "{{ ")?;
90 if !params.is_empty() {
91 for (i, (name, ty)) in params.iter().enumerate() {
92 if i > 0 {
93 write!(f, ", ")?;
94 }
95 if let Some(t) = ty {
96 write!(f, "{}: {}", name, t)?;
97 } else {
98 write!(f, "{}", name)?;
99 }
100 }
101 if let Some(ret) = return_type {
102 write!(f, " -> {} ", ret)?;
103 }
104 writeln!(f, "in")?;
105 }
106 for stmt in body {
107 writeln!(f, " {}", stmt)?;
108 }
109 write!(f, "}}")
110 }
111 SwiftExpr::SwiftSwitchExpr { subject, arms } => {
112 writeln!(f, "switch {} {{", subject)?;
113 for (pat, expr) in arms {
114 writeln!(f, " case {}: {}", pat, expr)?;
115 }
116 write!(f, "}}")
117 }
118 }
119 }
120}