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)
                 )
             },
--- 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()