1use fe_common::impl_intern_key;
2use num_bigint::BigInt;
3use smol_str::SmolStr;
4
5use fe_analyzer::{context, namespace::items as analyzer_items};
6
7use super::{SourceInfo, TypeId};
8
9#[derive(Debug, Clone, PartialEq, Eq, Hash)]
10pub struct Constant {
11 pub name: SmolStr,
13
14 pub value: ConstantValue,
16
17 pub ty: TypeId,
19
20 pub module_id: analyzer_items::ModuleId,
22
23 pub source: SourceInfo,
25}
26
27#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
29pub struct ConstantId(pub(crate) u32);
30impl_intern_key!(ConstantId);
31
32#[derive(Debug, Clone, PartialEq, Eq, Hash)]
33pub enum ConstantValue {
34 Immediate(BigInt),
35 Str(SmolStr),
36 Bool(bool),
37}
38
39impl From<context::Constant> for ConstantValue {
40 fn from(value: context::Constant) -> Self {
41 match value {
42 context::Constant::Int(num) | context::Constant::Address(num) => Self::Immediate(num),
43 context::Constant::Str(s) => Self::Str(s),
44 context::Constant::Bool(b) => Self::Bool(b),
45 }
46 }
47}