diff src/ast_convert.rs @ 44:5f1d285471af

Finish ImportFrom conversion and add a test for it.
author Bastien Orivel <eijebong@bananium.fr>
date Tue, 07 Jun 2016 12:19:10 +0200
parents 7af637f444d1
children 38f59b0efc2c
line wrap: on
line diff
--- a/src/ast_convert.rs
+++ b/src/ast_convert.rs
@@ -44,6 +44,16 @@ fn parse_list<T, F: Fn(Python, PyObject)
     exprs
 }
 
+fn parse_alias(py: Python, ast: PyObject) -> alias {
+    let ast_alias = get_str(py, ast.getattr(py, "name").unwrap());
+    let asname =  ast.getattr(py, "asname").unwrap();
+    if asname == py.None() {
+        alias{name: ast_alias, asname: None}
+    } else {
+        alias{name: ast_alias, asname: Some(get_str(py, asname))}
+    }
+}
+
 fn parse_unaryop(py: Python, ast: PyObject) -> unaryop {
     let builtins_module = py.import("builtins").unwrap();
     let isinstance = builtins_module.get(py, "isinstance").unwrap();
@@ -532,18 +542,9 @@ fn parse_statement(py: Python, ast: PyOb
         let level = ast.getattr(py, "level").unwrap();
 
         let module = get_str(py, module);
+        let names = parse_list(py, names, parse_alias);
 
-        // TODO: move that into another function.
-        let mut names_ = vec!();
-        for alias in names.iter(py).unwrap() {
-            let alias = alias.unwrap();
-            let alias = parse_expr(py, alias);
-            println!("{:?}", alias);
-            // XXX
-            //names_.push(alias{name: alias, asname: alias});
-        }
-
-        stmt::ImportFrom(module, names_, None)
+        stmt::ImportFrom(module, names, None)
     } else if is_instance(&ast, &return_type) {
         let value = ast.getattr(py, "value").unwrap();
         if value == py.None() {