Mercurial > python-compiler.rs
diff src/ast_type.rs @ 5:ddf372373a77
Add ast.For, ast.UnaryOp, and Sub and Div to ast.BinOp.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 31 May 2016 04:15:00 +0100 |
parents | f27a4aee9dfa |
children | 6f2bf13f4cb5 |
line wrap: on
line diff
--- a/src/ast_type.rs +++ b/src/ast_type.rs @@ -84,6 +84,17 @@ impl Visitor<Type> for Typing { } Type::Bottom }, + Statement::For(target, iter, body, orelse) => { + self.visit_expr(target); + self.visit_expr(iter); + for statement in body { + self.visit_statement(statement); + } + for statement in orelse { + self.visit_statement(statement); + } + Type::Bottom + }, Statement::Assign(targets, value) => { let type_ = self.visit_expr(value); if targets.len() != 1 { @@ -125,6 +136,10 @@ impl Visitor<Type> for Typing { fn visit_expr(&mut self, expr: Expr) -> Type { let expr_str = format!("{:?}", expr); let type_ = match expr { + Expr::UnaryOp(op, operand) => { + let type_operand = self.visit_expr(*operand); + type_operand + }, Expr::BinOp(left, op, right) => { let type_left = self.visit_expr(*left); let type_right = self.visit_expr(*right);