hax_rust_engine/ast/
literals.rs1use crate::symbol::Symbol;
4use hax_rust_engine_macros::*;
5
6#[derive_group_for_ast]
8pub enum IntSize {
9 S8,
11 S16,
13 S32,
15 S64,
17 S128,
19 SSize,
21}
22
23use hax_frontend_exporter::{FloatTy, IntTy, UintTy};
24impl From<&IntTy> for IntSize {
25 fn from(value: &IntTy) -> Self {
26 match value {
27 IntTy::I128 => Self::S128,
28 IntTy::I64 => Self::S64,
29 IntTy::I32 => Self::S32,
30 IntTy::I16 => Self::S16,
31 IntTy::I8 => Self::S8,
32 IntTy::Isize => Self::SSize,
33 }
34 }
35}
36impl From<&UintTy> for IntSize {
37 fn from(value: &UintTy) -> Self {
38 match value {
39 UintTy::U128 => Self::S128,
40 UintTy::U64 => Self::S64,
41 UintTy::U32 => Self::S32,
42 UintTy::U16 => Self::S16,
43 UintTy::U8 => Self::S8,
44 UintTy::Usize => Self::SSize,
45 }
46 }
47}
48impl From<&IntTy> for IntKind {
49 fn from(value: &IntTy) -> Self {
50 IntKind {
51 size: value.into(),
52 signedness: Signedness::Signed,
53 }
54 }
55}
56impl From<&UintTy> for IntKind {
57 fn from(value: &UintTy) -> Self {
58 IntKind {
59 size: value.into(),
60 signedness: Signedness::Unsigned,
61 }
62 }
63}
64impl From<&FloatTy> for FloatKind {
65 fn from(value: &FloatTy) -> Self {
66 match value {
67 FloatTy::F128 => Self::F128,
68 FloatTy::F64 => Self::F64,
69 FloatTy::F32 => Self::F32,
70 FloatTy::F16 => Self::F16,
71 }
72 }
73}
74
75#[derive_group_for_ast]
77pub enum Signedness {
78 Signed,
80 Unsigned,
82}
83
84#[derive_group_for_ast]
86pub struct IntKind {
87 pub size: IntSize,
89 pub signedness: Signedness,
91}
92
93#[derive_group_for_ast]
95pub enum FloatKind {
96 F16,
98 F32,
100 F64,
102 F128,
104}
105
106#[derive_group_for_ast]
108pub enum Literal {
109 String(Symbol),
111 Char(char),
113 Bool(bool),
115 Int {
117 value: Symbol,
119 negative: bool,
121 kind: IntKind,
123 },
124 Float {
126 value: Symbol,
128 negative: bool,
130 kind: FloatKind,
132 },
133}