Mercurial > python-compiler.rs
changeset 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 | 4dfea217989b |
children | d3902e32d899 |
files | src/ast_convert.rs src/ast_dump.rs tests/test_parse_files/test_import_from.py |
diffstat | 3 files changed, 20 insertions(+), 19 deletions(-) [+] |
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() {
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -191,15 +191,14 @@ impl stmt { None => "".to_string() }), stmt::ImportFrom(module, names, level) => format!("{}from {} import {}", current_indent, module.to_string(), { - /* - let mut exprs = vec!(); - for alias in names.iter() { - let alias = alias.to_string(); - exprs.push(alias); + let mut names_ = vec!(); + for name in names { + match name.asname { + None => names_.push(name.name), + Some(asname) => names_.push(format!("{} as {}", name.name, asname)) + } } - exprs.join(", ") - */ - "".to_string() + names_.join(", ") }), stmt::Expr(expr) => format!("{}{}", current_indent, expr.to_string()), stmt::Break => format!("{}break", current_indent),