Introduced fresh type variable method

This commit is contained in:
greg 2018-02-28 05:45:20 -08:00
parent 9d72a92f0b
commit df88e33579
1 changed files with 8 additions and 1 deletions

View File

@ -4,6 +4,7 @@ use std::collections::HashMap;
use schala_lang::parsing;
pub struct TypeContext {
type_var_count: u64,
bindings: HashMap<Rc<String>, Type>,
}
@ -11,6 +12,7 @@ pub struct TypeContext {
pub enum Type {
Const(TConst),
Func(Box<Type>, Box<Type>),
TVar(u64),
Void
}
@ -48,7 +50,12 @@ pub type TypeResult<T> = Result<T, String>;
impl TypeContext {
pub fn new() -> TypeContext {
TypeContext { bindings: HashMap::new() }
TypeContext { bindings: HashMap::new(), type_var_count: 0 }
}
pub fn fresh(&mut self) -> Type {
let ret = self.type_var_count;
self.type_var_count += 1;
Type::TVar(ret)
}
}