Mercurial > python-compiler.rs
changeset 8:94ff501bf336
Add ast.AugAssign.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 31 May 2016 04:34:42 +0100 |
parents | 680d15073f55 |
children | fa7e285f88e7 |
files | src/ast_convert.rs src/ast_dump.rs src/ast_rewrite.rs src/ast_type.rs src/python_ast.rs |
diffstat | 5 files changed, 22 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -255,6 +255,7 @@ fn parse_statement(py: Python, ast: PyOb 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(); + let aug_assign_type = ast_module.get(py, "AugAssign").unwrap(); let return_type = ast_module.get(py, "Return").unwrap(); let import_from_type = ast_module.get(py, "ImportFrom").unwrap(); let if_type = ast_module.get(py, "If").unwrap(); @@ -418,6 +419,16 @@ fn parse_statement(py: Python, ast: PyOb let value = parse_expr(py, value); Statement::Assign(arguments, value) + } else if is_instance(&ast, &aug_assign_type) { + let target = ast.getattr(py, "target").unwrap(); + let op = ast.getattr(py, "op").unwrap(); + let value = ast.getattr(py, "value").unwrap(); + + let target = parse_expr(py, target); + let op = parse_binop(py, op); + let value = parse_expr(py, value); + + Statement::AugAssign(target, op, value) } else if is_instance(&ast, &import_from_type) { let module = ast.getattr(py, "module").unwrap(); let names = ast.getattr(py, "names").unwrap();
--- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -175,6 +175,7 @@ impl Statement { } exprs.join(", ") }, value.to_string()), + Statement::AugAssign(target, op, value) => format!("{}{} {}= {}", make_indent(indent), target.to_string(), op.to_string(), value.to_string()), Statement::Return(expr) => format!("{}return {}", make_indent(indent), expr.to_string()), Statement::ImportFrom(module, names) => format!("{}from {} import {}", make_indent(indent), module.to_string(), { let mut exprs = vec!();
--- a/src/ast_rewrite.rs +++ b/src/ast_rewrite.rs @@ -65,6 +65,10 @@ impl Visitor<()> for Rewrite { self.visit_expr(target); } }, + Statement::AugAssign(target, op, value) => { + self.visit_expr(value); + self.visit_expr(target); + }, Statement::Return(expr) => { self.visit_expr(expr); },
--- a/src/ast_type.rs +++ b/src/ast_type.rs @@ -125,6 +125,11 @@ impl Visitor<Type> for Typing { println!("{:?}", self.environment.clone()); Type::Bottom }, + Statement::AugAssign(target, op, value) => { + let value = self.visit_expr(value); + let target = self.visit_expr(target); + Type::Bottom + }, Statement::Return(expr) => { self.visit_expr(expr) },