use super::{TypeLevel, TypeEnv, TypeConstraint};
use crate::diagnostics::Error;
use super::substitution::Substitution;
#[derive(Debug)]
pub struct TypeChecker {
level: TypeLevel,
env: TypeEnv,
#[allow(dead_code)]
substitution: Substitution,
#[allow(dead_code)]
constraints: Vec<TypeConstraint>,
errors: Vec<Error>,
}
impl TypeChecker {
pub fn new(level: TypeLevel) -> Self {
Self {
level,
env: TypeEnv::new(),
substitution: Substitution::empty(),
constraints: Vec::new(),
errors: Vec::new(),
}
}
pub fn level(&self) -> TypeLevel {
self.level
}
pub fn env(&self) -> &TypeEnv {
&self.env
}
pub fn env_mut(&mut self) -> &mut TypeEnv {
&mut self.env
}
pub fn add_error(&mut self, error: Error) {
self.errors.push(error);
}
pub fn errors(&self) -> &[Error] {
&self.errors
}
pub fn clear_errors(&mut self) {
self.errors.clear();
}
}
impl Default for TypeChecker {
fn default() -> Self {
Self::new(TypeLevel::Dynamic)
}
}