adding expression type tracking and var type inference