oxilean_codegen/dart_backend/
dartexpr_traits.rs1use crate::lcnf::*;
12
13use super::functions::{fmt_args, fmt_typed_params};
14use super::types::DartExpr;
15use std::fmt;
16
17impl fmt::Display for DartExpr {
18 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
19 match self {
20 DartExpr::Lit(lit) => write!(f, "{}", lit),
21 DartExpr::Var(name) => write!(f, "{}", name),
22 DartExpr::Field(expr, field) => write!(f, "{}.{}", expr, field),
23 DartExpr::MethodCall(recv, method, args) => {
24 write!(f, "{}.{}(", recv, method)?;
25 fmt_args(f, args)?;
26 write!(f, ")")
27 }
28 DartExpr::Call(callee, args) => {
29 write!(f, "{}(", callee)?;
30 fmt_args(f, args)?;
31 write!(f, ")")
32 }
33 DartExpr::New(class, named, args) => {
34 if let Some(n) = named {
35 write!(f, "{}.{}(", class, n)?;
36 } else {
37 write!(f, "{}(", class)?;
38 }
39 fmt_args(f, args)?;
40 write!(f, ")")
41 }
42 DartExpr::ListLit(elems) => {
43 write!(f, "[")?;
44 fmt_args(f, elems)?;
45 write!(f, "]")
46 }
47 DartExpr::MapLit(pairs) => {
48 write!(f, "{{")?;
49 for (i, (k, v)) in pairs.iter().enumerate() {
50 if i > 0 {
51 write!(f, ", ")?;
52 }
53 write!(f, "{}: {}", k, v)?;
54 }
55 write!(f, "}}")
56 }
57 DartExpr::SetLit(elems) => {
58 write!(f, "{{")?;
59 fmt_args(f, elems)?;
60 write!(f, "}}")
61 }
62 DartExpr::Lambda(params, body) => {
63 write!(f, "(")?;
64 fmt_typed_params(f, params)?;
65 write!(f, ") {{ return {}; }}", body)
66 }
67 DartExpr::Arrow(params, body) => {
68 write!(f, "(")?;
69 fmt_typed_params(f, params)?;
70 write!(f, ") => {}", body)
71 }
72 DartExpr::BinOp(left, op, right) => write!(f, "({} {} {})", left, op, right),
73 DartExpr::UnaryOp(op, expr) => write!(f, "({}{})", op, expr),
74 DartExpr::Ternary(cond, then, else_) => {
75 write!(f, "({} ? {} : {})", cond, then, else_)
76 }
77 DartExpr::NullAware(expr, field) => write!(f, "{}?.{}", expr, field),
78 DartExpr::NullCoalesce(expr, fallback) => {
79 write!(f, "({} ?? {})", expr, fallback)
80 }
81 DartExpr::Cascade(recv, method, args) => {
82 write!(f, "{}..{}(", recv, method)?;
83 fmt_args(f, args)?;
84 write!(f, ")")
85 }
86 DartExpr::Await(expr) => write!(f, "await {}", expr),
87 DartExpr::As(expr, ty) => write!(f, "({} as {})", expr, ty),
88 DartExpr::Is(expr, ty) => write!(f, "({} is {})", expr, ty),
89 DartExpr::Throw(expr) => write!(f, "throw {}", expr),
90 DartExpr::Spread(expr) => write!(f, "...{}", expr),
91 DartExpr::Index(expr, idx) => write!(f, "{}[{}]", expr, idx),
92 DartExpr::Raw(s) => write!(f, "{}", s),
93 }
94 }
95}