1use crate::ast::FloatTy;
4use core::hash::Hash;
5use derive_generic_visitor::{Drive, DriveMut};
6use macros::{EnumAsGetters, EnumIsA, VariantIndexArity, VariantName};
7use serde::{Deserialize, Serialize};
8
9generate_index_type!(LocalId, "");
16
17#[derive(
21 Debug,
22 PartialEq,
23 Eq,
24 Clone,
25 VariantName,
26 EnumIsA,
27 EnumAsGetters,
28 Serialize,
29 Deserialize,
30 Drive,
31 DriveMut,
32 Hash,
33 PartialOrd,
34 Ord,
35)]
36#[charon::variants_prefix("V")]
37pub enum Literal {
38 Scalar(ScalarValue),
39 Float(FloatValue),
40 #[drive(skip)]
41 Bool(bool),
42 #[drive(skip)]
43 Char(char),
44 #[drive(skip)]
45 ByteStr(Vec<u8>),
46 #[drive(skip)]
47 Str(String),
48}
49
50#[derive(
54 Debug,
55 PartialEq,
56 Eq,
57 Copy,
58 Clone,
59 EnumIsA,
60 EnumAsGetters,
61 VariantName,
62 VariantIndexArity,
63 Hash,
64 PartialOrd,
65 Ord,
66 Drive,
67 DriveMut,
68)]
69#[drive(skip)]
70pub enum ScalarValue {
71 Isize(i64),
73 I8(i8),
74 I16(i16),
75 I32(i32),
76 I64(i64),
77 I128(i128),
78 Usize(u64),
80 U8(u8),
81 U16(u16),
82 U32(u32),
83 U64(u64),
84 U128(u128),
85}
86
87#[derive(
91 Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Hash, PartialOrd, Ord, Drive, DriveMut,
92)]
93pub struct FloatValue {
94 #[charon::rename("float_value")]
95 #[drive(skip)]
96 pub value: String,
97 #[charon::rename("float_ty")]
98 pub ty: FloatTy,
99}