use crate::types::{MonoType, PolyType, Stage};
use rustyfi_syntax::cst_v1::ast as ast_v1;
use rustyfi_syntax::span::Span;
use std::collections::HashMap;
#[derive(Clone, Debug)]
pub(crate) struct DeclaredVal {
pub(crate) name: String,
pub(crate) scheme: PolyType,
pub(crate) rigid: MonoType,
pub(crate) span: Span,
pub(crate) stage: Stage,
pub(crate) stamp_marker: String,
}
#[derive(Clone, Debug)]
pub(crate) enum TypeOpacity {
#[allow(dead_code)]
Transparent(MonoType),
Abstract { stamped: String },
}
#[derive(Clone, Debug)]
pub(crate) struct DeclaredType {
pub(crate) arity: usize,
pub(crate) opacity: TypeOpacity,
#[allow(dead_code)]
pub(crate) span: Span,
}
#[derive(Clone, Debug)]
pub(crate) struct HiddenCtor {
pub(crate) module: String,
pub(crate) type_name: String,
}
#[derive(Clone, Debug, Default)]
#[allow(dead_code)] pub(crate) struct ElabSig {
pub(crate) vals: Vec<DeclaredVal>,
pub(crate) types: Vec<(String, DeclaredType)>,
pub(crate) modules: Vec<(String, ElabSig)>,
pub(crate) signatures: Vec<(String, ElabSig)>,
}
#[derive(Default)]
pub(crate) struct StaticEnv {
pub(crate) seals: HashMap<String, DeclaredVal>,
pub(crate) hidden: HashMap<String, String>,
pub(crate) types: HashMap<String, DeclaredType>,
pub(crate) hidden_types: HashMap<String, String>,
pub(crate) hidden_ctors: HashMap<String, HiddenCtor>,
pub(crate) ctor_hide_triggers: HashMap<String, Vec<(String, String)>>,
pub(crate) member_revoke_triggers: HashMap<String, (String, Vec<String>)>,
pub(crate) hidden_sigs: HashMap<String, String>,
pub(crate) sealed_functors: HashMap<String, SealedFunctorSig>,
pub(crate) hidden_functors: HashMap<String, String>,
}
#[derive(Clone, Debug)]
pub(crate) struct SealedFunctorSig {
pub(crate) param: String,
#[allow(dead_code)]
pub(crate) dom: ast_v1::SigExpr,
pub(crate) cod: ast_v1::SigExpr,
pub(crate) def_site: Vec<String>,
pub(crate) span: Span,
}
#[derive(Default)]
pub(crate) struct StampMint(u64);
impl StampMint {
pub(crate) fn next(&mut self) -> u64 {
let n = self.0;
self.0 += 1;
n
}
}