Mercurial > python-compiler.rs
changeset 76:efd42fc280e8
Add ast.Set.
author | Bastien Orivel <eijebong@bananium.fr> |
---|---|
date | Mon, 13 Jun 2016 19:19:49 +0200 |
parents | 1abc8ca9f30b |
children | 7d1406181aae |
files | src/ast_convert.rs src/ast_dump.rs src/python_ast.rs tests/test_parse_files/test_set.py |
diffstat | 4 files changed, 9 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -304,6 +304,7 @@ fn parse_expr(py: Python, ast: PyObject) let await_type = ast_module.get(py, "Await").unwrap(); let yield_type = ast_module.get(py, "Yield").unwrap(); let yield_from_type = ast_module.get(py, "YieldFrom").unwrap(); + let set_type = ast_module.get(py, "Set").unwrap(); assert!(is_instance(&ast, &ast_type)); @@ -420,6 +421,11 @@ fn parse_expr(py: Python, ast: PyObject) let value = parse_expr(py, value); expr::YieldFrom(Box::new(value)) + } else if is_instance(&ast, &set_type) { + let elts = ast.getattr(py, "elts").unwrap(); + let elements = parse_list(py, elts, parse_expr); + + expr::Set(elements) } else { println!("expr {}", ast); unreachable!()
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -194,6 +194,7 @@ impl to_string_able for expr { } }, expr::YieldFrom(value) => format!("yield from {}", value.to_string()), + expr::Set(elts) => format!("{{{}}}", vec_to_strings_vec(elts).join(", ")), } } }
--- a/src/python_ast.rs +++ b/src/python_ast.rs @@ -84,7 +84,7 @@ pub enum expr { //Lambda(arguments, Box<expr>) //IfExp(Box<expr>, Box<expr>, Box<expr>) //Dict(Vec<expr>, Vec<expr>) - //Set(Vec<expr>) + Set(Vec<expr>), ListComp(Box<expr>, Vec<comprehension>), //SetComp(Box<expr>, Vec<comprehension>) DictComp(Box<expr>, Box<expr>, Vec<comprehension>),