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);