Mercurial > python-compiler.rs
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() {