Skip to main content

oxilean_codegen/swift_backend/
swiftexpr_traits.rs

1//! # SwiftExpr - Trait Implementations
2//!
3//! This module contains trait implementations for `SwiftExpr`.
4//!
5//! ## Implemented Traits
6//!
7//! - `Display`
8//!
9//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
10
11use 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}