# HG changeset patch # User Emmanuel Gil Peyrot # Date 1465778599 -3600 # Node ID 8ce78e2ba48cbffa911395fd55960321ea9f4ecd # Parent 32550e12aedf6db21c7aba2cda4f86e395b59452 Implement class keywords. diff --git a/src/ast_convert.rs b/src/ast_convert.rs --- 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(); diff --git a/src/ast_dump.rs b/src/ast_dump.rs --- 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) ) }, diff --git a/tests/test_parse_files/test_classdef.py b/tests/test_parse_files/test_classdef.py --- a/tests/test_parse_files/test_classdef.py +++ b/tests/test_parse_files/test_classdef.py @@ -1,3 +1,4 @@ -class a(): - def b(): +class A(object, metaclass=type): + def b(self): print("a") +A().b()