deskc_evalmir/
value.rs

1use std::collections::HashMap;
2
3use mir::{
4    ty::{ConcEffect, ConcType},
5    MirId,
6};
7
8use crate::eval_mir::Handler;
9
10#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
11#[derive(Clone, Debug, PartialEq)]
12pub enum Value {
13    String(String),
14    Int(i64),
15    Float(f64),
16    Rational(i64, i64),
17    Tuple(Vec<Value>),
18    Variant { id: usize, value: Box<Value> },
19    FnRef(FnRef),
20}
21
22#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
23#[derive(Debug, Clone, PartialEq)]
24pub enum FnRef {
25    Link(ConcType),
26    Closure(Closure),
27    Recursion,
28}
29
30#[cfg_attr(feature = "withserde", derive(serde::Serialize, serde::Deserialize))]
31#[derive(Debug, Clone, PartialEq)]
32pub struct Closure {
33    pub mir: MirId,
34    pub captured: HashMap<ConcType, Value>,
35    pub handlers: HashMap<ConcEffect, Handler>,
36}