# HG changeset patch # User Bastien Orivel # Date 1465773849 -7200 # Node ID 9f0f457a67f60b81937620bc7a151028a96035a2 # Parent 407b3b21792843b3facc3b9f07dc91510247e5e1 Add ast.Raise. diff --git a/src/ast_convert.rs b/src/ast_convert.rs --- a/src/ast_convert.rs +++ b/src/ast_convert.rs @@ -528,6 +528,7 @@ fn parse_statement(py: Python, ast: PyOb let continue_type = ast_module.get(py, "Continue").unwrap(); let assert_type = ast_module.get(py, "Assert").unwrap(); let with_type = ast_module.get(py, "With").unwrap(); + let raise_type = ast_module.get(py, "Raise").unwrap(); assert!(is_instance(&ast, &ast_type)); @@ -687,6 +688,21 @@ fn parse_statement(py: Python, ast: PyOb let items = parse_list(py, items, parse_withitem); let body = parse_list(py, body, parse_statement); stmt::With(items, body) + } else if is_instance(&ast, &raise_type) { + let exc = ast.getattr(py, "exc").unwrap(); + let cause = ast.getattr(py, "cause").unwrap(); + let mut exc_ = None; + let mut cause_ = None; + + if exc != py.None() { + exc_ = Some(parse_expr(py, exc)); + } + + if cause != py.None() { + cause_ = Some(parse_expr(py, cause)); + } + + stmt::Raise(exc_, cause_) } else { println!("stmt {}", ast); panic!() diff --git a/src/ast_dump.rs b/src/ast_dump.rs --- a/src/ast_dump.rs +++ b/src/ast_dump.rs @@ -296,6 +296,19 @@ impl stmt { }, statements_to_string(indent, body) ) + }, + stmt::Raise(exc, cause) => { + format!("{}raise{}{}", + current_indent, + match exc { + None => String::new(), + Some(ref exc) => format!(" {}", exc.to_string()) + }, + match cause { + None => String::new(), + Some(ref cause) => format!(" from {}", cause.to_string()) + } + ) } } } diff --git a/src/python_ast.rs b/src/python_ast.rs --- a/src/python_ast.rs +++ b/src/python_ast.rs @@ -46,7 +46,7 @@ pub enum stmt { //AsyncWith(Vec, Vec) // Raise(expr? exc, expr? cause) - //Raise(Option, Option) + Raise(Option, Option), // Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody) //Try(Vec, Vec, Vec, Vec) diff --git a/tests/test_parse_files/test_raise.py b/tests/test_parse_files/test_raise.py new file mode 100644 --- /dev/null +++ b/tests/test_parse_files/test_raise.py @@ -0,0 +1,3 @@ +raise +raise Exception +raise Exception from KeyError