diff src/ast_convert.rs @ 2:5fc7c2790d8c

Add class support.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Tue, 31 May 2016 02:31:55 +0100
parents b90e49ab734b
children 326d7f2a94d4
line wrap: on
line diff
--- a/src/ast_convert.rs
+++ b/src/ast_convert.rs
@@ -188,6 +188,7 @@ fn parse_statement(py: Python, ast: PyOb
 
     let ast_module = py.import("ast").unwrap();
     let ast_type = ast_module.get(py, "AST").unwrap();
+    let class_def_type = ast_module.get(py, "ClassDef").unwrap();
     let function_def_type = ast_module.get(py, "FunctionDef").unwrap();
     let global_type = ast_module.get(py, "Global").unwrap();
     let assign_type = ast_module.get(py, "Assign").unwrap();
@@ -212,7 +213,31 @@ fn parse_statement(py: Python, ast: PyOb
     };
     */
 
-    if is_instance(&ast, &function_def_type) {
+    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 body = ast.getattr(py, "body").unwrap();
+        //let decorator_list = ast.getattr(py, "decorator_list").unwrap();
+
+        let name = get_str(py, name);
+
+        let mut nodes = vec!();
+        for name_node in bases.iter(py).unwrap() {
+            let name_node = name_node.unwrap();
+            let name_node = parse_expr(py, name_node);
+            nodes.push(name_node);
+        }
+
+        let mut statements = vec!();
+        for statement in body.iter(py).unwrap() {
+            let statement = statement.unwrap();
+            let statement = parse_statement(py, statement);
+            statements.push(statement);
+        }
+
+        Statement::ClassDef(name, nodes, statements)
+    } else if is_instance(&ast, &function_def_type) {
         let name = ast.getattr(py, "name").unwrap();
         let args = ast.getattr(py, "args").unwrap();
         let body = ast.getattr(py, "body").unwrap();