comparison 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
comparison
equal deleted inserted replaced
43:4dfea217989b 44:5f1d285471af
40 let item = item.unwrap(); 40 let item = item.unwrap();
41 let item = parse(py, item); 41 let item = parse(py, item);
42 exprs.push(item); 42 exprs.push(item);
43 } 43 }
44 exprs 44 exprs
45 }
46
47 fn parse_alias(py: Python, ast: PyObject) -> alias {
48 let ast_alias = get_str(py, ast.getattr(py, "name").unwrap());
49 let asname = ast.getattr(py, "asname").unwrap();
50 if asname == py.None() {
51 alias{name: ast_alias, asname: None}
52 } else {
53 alias{name: ast_alias, asname: Some(get_str(py, asname))}
54 }
45 } 55 }
46 56
47 fn parse_unaryop(py: Python, ast: PyObject) -> unaryop { 57 fn parse_unaryop(py: Python, ast: PyObject) -> unaryop {
48 let builtins_module = py.import("builtins").unwrap(); 58 let builtins_module = py.import("builtins").unwrap();
49 let isinstance = builtins_module.get(py, "isinstance").unwrap(); 59 let isinstance = builtins_module.get(py, "isinstance").unwrap();
530 let module = ast.getattr(py, "module").unwrap(); 540 let module = ast.getattr(py, "module").unwrap();
531 let names = ast.getattr(py, "names").unwrap(); 541 let names = ast.getattr(py, "names").unwrap();
532 let level = ast.getattr(py, "level").unwrap(); 542 let level = ast.getattr(py, "level").unwrap();
533 543
534 let module = get_str(py, module); 544 let module = get_str(py, module);
535 545 let names = parse_list(py, names, parse_alias);
536 // TODO: move that into another function. 546
537 let mut names_ = vec!(); 547 stmt::ImportFrom(module, names, None)
538 for alias in names.iter(py).unwrap() {
539 let alias = alias.unwrap();
540 let alias = parse_expr(py, alias);
541 println!("{:?}", alias);
542 // XXX
543 //names_.push(alias{name: alias, asname: alias});
544 }
545
546 stmt::ImportFrom(module, names_, None)
547 } else if is_instance(&ast, &return_type) { 548 } else if is_instance(&ast, &return_type) {
548 let value = ast.getattr(py, "value").unwrap(); 549 let value = ast.getattr(py, "value").unwrap();
549 if value == py.None() { 550 if value == py.None() {
550 stmt::Return(None) 551 stmt::Return(None)
551 } else { 552 } else {