oxilean_codegen/java_backend/
javaexpr_traits.rs1use crate::lcnf::*;
12
13use super::types::JavaExpr;
14use std::fmt;
15
16impl fmt::Display for JavaExpr {
17 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
18 match self {
19 JavaExpr::Lit(lit) => write!(f, "{}", lit),
20 JavaExpr::Var(name) => write!(f, "{}", name),
21 JavaExpr::BinOp(op, lhs, rhs) => write!(f, "({} {} {})", lhs, op, rhs),
22 JavaExpr::UnaryOp(op, operand) => write!(f, "{}{}", op, operand),
23 JavaExpr::Call(callee, args) => {
24 write!(f, "{}(", callee)?;
25 for (i, a) in args.iter().enumerate() {
26 if i > 0 {
27 write!(f, ", ")?;
28 }
29 write!(f, "{}", a)?;
30 }
31 write!(f, ")")
32 }
33 JavaExpr::MethodCall(recv, method, args) => {
34 write!(f, "{}.{}(", recv, method)?;
35 for (i, a) in args.iter().enumerate() {
36 if i > 0 {
37 write!(f, ", ")?;
38 }
39 write!(f, "{}", a)?;
40 }
41 write!(f, ")")
42 }
43 JavaExpr::New(cls, args) => {
44 write!(f, "new {}(", cls)?;
45 for (i, a) in args.iter().enumerate() {
46 if i > 0 {
47 write!(f, ", ")?;
48 }
49 write!(f, "{}", a)?;
50 }
51 write!(f, ")")
52 }
53 JavaExpr::Cast(ty, expr) => write!(f, "(({}) {})", ty, expr),
54 JavaExpr::Instanceof(expr, ty) => write!(f, "({} instanceof {})", expr, ty),
55 JavaExpr::Ternary(cond, then, else_) => {
56 write!(f, "({} ? {} : {})", cond, then, else_)
57 }
58 JavaExpr::Null => write!(f, "null"),
59 JavaExpr::Lambda(params, body) => {
60 if params.is_empty() {
61 write!(f, "() -> {}", body)
62 } else if params.len() == 1 {
63 write!(f, "{} -> {}", params[0], body)
64 } else {
65 write!(f, "(")?;
66 for (i, p) in params.iter().enumerate() {
67 if i > 0 {
68 write!(f, ", ")?;
69 }
70 write!(f, "{}", p)?;
71 }
72 write!(f, ") -> {}", body)
73 }
74 }
75 JavaExpr::MethodRef(cls, method) => write!(f, "{}::{}", cls, method),
76 JavaExpr::ArrayAccess(arr, idx) => write!(f, "{}[{}]", arr, idx),
77 JavaExpr::FieldAccess(obj, field) => write!(f, "{}.{}", obj, field),
78 }
79 }
80}