type checking / symbol table stuff

This commit is contained in:
greg 2017-10-08 12:22:04 -07:00
parent e412fb9a89
commit 62edc7c996

View File

@ -1,11 +1,17 @@
use std::collections::HashMap;
use schala_lang::parsing::{AST, Statement, Declaration, Expression, ExpressionType, Operation, TypeAnno};
#[derive(Debug, PartialEq, Eq, Hash)]
struct PathSpecifier(String);
struct SymbolTable {
map: HashMap<PathSpecifier, Expression>,
}
impl SymbolTable {
fn new() -> SymbolTable {
SymbolTable { }
SymbolTable { map: HashMap::new() }
}
fn add_symbols(&mut self, ast: &AST) {
@ -51,6 +57,16 @@ impl TypeContext {
return Err(format!("Declarations not supported"));
},
&Statement::ExpressionStatement(ref expr) => {
self.expr_type_check(expr)?;
}
}
}
Ok(SchalaType { })
}
fn expr_type_check(&mut self, expr: &Expression) -> TypeCheckResult {
use self::ExpressionType::*;
match (&expr.0, &expr.1) {
(&IntLiteral(_), &Some(ref t)) => {
match t {
@ -60,9 +76,6 @@ impl TypeContext {
},
_ => (),
}
}
}
}
Ok(SchalaType { })
}
}