diff src/ast_convert.rs @ 16:b21a246349f3

Add ast.DictComp
author Bastien Orivel <eijebong@bananium.fr>
date Thu, 02 Jun 2016 22:20:48 +0200
parents a0fb169fe0f9
children f1c77634a2eb
line wrap: on
line diff
--- a/src/ast_convert.rs
+++ b/src/ast_convert.rs
@@ -216,6 +216,7 @@ fn parse_expr(py: Python, ast: PyObject)
     let compare_type = ast_module.get(py, "Compare").unwrap();
     let call_type = ast_module.get(py, "Call").unwrap();
     let listcomp_type = ast_module.get(py, "ListComp").unwrap();
+    let dictcomp_type = ast_module.get(py, "DictComp").unwrap();
 
     assert!(is_instance(&ast, &ast_type));
 
@@ -335,8 +336,23 @@ fn parse_expr(py: Python, ast: PyObject)
             new_gens.push(gen);
         }
         expr::ListComp(Box::new(elt), new_gens)
-    }
-    else {
+    } else if is_instance(&ast, &dictcomp_type) {
+        let key = ast.getattr(py, "key").unwrap();
+        let value = ast.getattr(py, "value").unwrap();
+        let generators = ast.getattr(py, "generators").unwrap();
+        let generators = generators.iter(py).unwrap();
+
+        let key = parse_expr(py, key);
+        let value = parse_expr(py, value);
+
+        let mut new_gens = vec!();
+        for gen in generators {
+            let gen = gen.unwrap();
+            let gen = parse_comprehension(py, gen);
+            new_gens.push(gen);
+        }
+        expr::DictComp(Box::new(key), Box::new(value), new_gens)
+    } else {
         println!("expr {}", ast);
         unreachable!()
     }