cairo_lang_semantic/items/
fmt.rs1use cairo_lang_debug::DebugWithDb;
2use cairo_lang_defs::ids::NamedLanguageElementId;
3use cairo_lang_utils::Upcast;
4
5use super::constant::ConstValue;
6use crate::db::SemanticGroup;
7use crate::{ConcreteVariant, MatchArmSelector};
8
9impl<Db: ?Sized + Upcast<dyn SemanticGroup + 'static>> DebugWithDb<Db> for ConstValue {
10 fn fmt(&self, f: &mut std::fmt::Formatter<'_>, db: &Db) -> std::fmt::Result {
11 let db = db.upcast();
12 match self {
13 ConstValue::Int(value, _ty) => write!(f, "{}", value),
14 ConstValue::Struct(inner, _) => {
15 write!(f, "{{")?;
16 let mut inner = inner.iter().peekable();
17 while let Some(value) = inner.next() {
18 write!(f, " ")?;
19 value.fmt(f, db)?;
20 write!(f, ": ")?;
21 value.ty(db).unwrap().fmt(f, db.elongate())?;
22 if inner.peek().is_some() {
23 write!(f, ",")?;
24 } else {
25 write!(f, " ")?;
26 }
27 }
28 write!(f, "}}")
29 }
30 ConstValue::Enum(variant, inner) => {
31 variant.fmt(f, db)?;
32 write!(f, "(")?;
33 inner.fmt(f, db)?;
34 write!(f, ")")
35 }
36 ConstValue::NonZero(value) => {
37 write!(f, "NonZero(")?;
38 value.fmt(f, db)?;
39 write!(f, ")")
40 }
41 ConstValue::Boxed(value) => {
42 value.fmt(f, db)?;
43 write!(f, ".into_box()")
44 }
45 ConstValue::Generic(param) => write!(f, "{}", param.debug_name(db.upcast())),
46 ConstValue::Var(var, _) => write!(f, "?{}", var.id.0),
47 ConstValue::Missing(_) => write!(f, "missing"),
48 ConstValue::ImplConstant(id) => id.fmt(f, db),
49 }
50 }
51}
52
53impl<Db: ?Sized + Upcast<dyn SemanticGroup + 'static>> DebugWithDb<Db> for ConcreteVariant {
54 fn fmt(&self, f: &mut std::fmt::Formatter<'_>, db: &Db) -> std::fmt::Result {
55 let db = db.upcast();
56 let enum_name = self.concrete_enum_id.enum_id(db.upcast()).name(db.upcast());
57 let variant_name = self.id.name(db.upcast());
58 write!(f, "{enum_name}::{variant_name}")
59 }
60}
61
62impl<Db: ?Sized + Upcast<dyn SemanticGroup + 'static>> DebugWithDb<Db> for MatchArmSelector {
63 fn fmt(&self, f: &mut std::fmt::Formatter<'_>, db: &Db) -> std::fmt::Result {
64 let db = db.upcast();
65 match self {
66 MatchArmSelector::VariantId(variant_id) => {
67 write!(f, "{:?}", variant_id.debug(db))
68 }
69 MatchArmSelector::Value(s) => {
70 write!(f, "{:?}", s.value)
71 }
72 }
73 }
74}