Typecheck values

This commit is contained in:
greg 2018-05-29 00:57:27 -07:00
parent 4a27af2136
commit 33c22c8bbc

View File

@ -14,14 +14,14 @@ use util::StateStack;
pub type TypeName = Rc<String>;
type TypeResult<T> = Result<T, String>;
#[derive(Debug, PartialEq)]
#[derive(Debug, PartialEq, Clone)]
enum Type {
Const(TConst),
Var(TypeName),
Func(Vec<Type>),
}
#[derive(Debug, PartialEq)]
#[derive(Debug, PartialEq, Clone)]
enum TConst {
Unit,
Nat,
@ -94,6 +94,12 @@ impl<'a> TypeContext<'a> {
return Err(format!("NOTDONE"))
},
Value(name) => {
match self.values.lookup(name) {
Some(ty) => ty.clone(),
None => return Err(format!("Unknown variable: {}", name))
}
},
_ => Type::Const(Unit)
})
}