Mercurial > python-compiler.rs
changeset 67:8ce78e2ba48c
Implement class keywords.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Mon, 13 Jun 2016 01:43:19 +0100 |
parents | 32550e12aedf |
children | c59ad5ccd8a6 |
files | src/ast_convert.rs src/ast_dump.rs tests/test_parse_files/test_classdef.py |
diffstat | 3 files changed, 14 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -551,16 +551,17 @@ fn parse_statement(py: Python, ast: PyOb if is_instance(&ast, &class_def_type) { let name = ast.getattr(py, "name").unwrap(); let bases = ast.getattr(py, "bases").unwrap(); - //let keywords = ast.getattr(py, "keywords").unwrap(); + let keywords = ast.getattr(py, "keywords").unwrap(); let body = ast.getattr(py, "body").unwrap(); let decorator_list = ast.getattr(py, "decorator_list").unwrap(); let name = get_str(py, name); let bases = parse_list(py, bases, parse_expr); + let keywords = parse_list(py, keywords, parse_keyword); let body = parse_list(py, body, parse_statement); let decorator_list = parse_list(py, decorator_list, parse_expr); - stmt::ClassDef(name, bases, vec!(), body, decorator_list) + stmt::ClassDef(name, bases, keywords, body, decorator_list) } else if is_instance(&ast, &function_def_type) { let name = ast.getattr(py, "name").unwrap(); let args = ast.getattr(py, "args").unwrap();
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -243,7 +243,14 @@ impl stmt { decorator_list_to_string(decorator_list, indent), current_indent, name, - vec_to_strings_vec(bases).join(", "), + { + let mut arguments = vec!(); + let bases = vec_to_strings_vec(bases); + let keywords = vec_to_strings_vec(keywords); + arguments.extend(bases); + arguments.extend(keywords); + arguments.join(", ") + }, statements_to_string(indent, body) ) },