comparison src/ast_convert.rs @ 9:fa7e285f88e7

Add a scoping pass, associating each module/statement with a block.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Wed, 01 Jun 2016 22:17:28 +0100
parents 94ff501bf336
children 38b0d63697b1
comparison
equal deleted inserted replaced
8:94ff501bf336 9:fa7e285f88e7
7 let pystring = object.str(py).unwrap(); 7 let pystring = object.str(py).unwrap();
8 let mut string = pystring.to_string(py).unwrap(); 8 let mut string = pystring.to_string(py).unwrap();
9 string.to_mut().to_string() 9 string.to_mut().to_string()
10 } 10 }
11 11
12 fn parse_expr_vec(py: Python, ast: PyObject) -> Vec<Expr> { 12 fn parse_expr_vec(py: Python, ast: PyObject) -> Vec<String> {
13 let builtins_module = py.import("builtins").unwrap(); 13 let builtins_module = py.import("builtins").unwrap();
14 let isinstance = builtins_module.get(py, "isinstance").unwrap(); 14 let isinstance = builtins_module.get(py, "isinstance").unwrap();
15 15
16 let is_instance = |object: &PyObject, type_: &PyObject| { 16 let is_instance = |object: &PyObject, type_: &PyObject| {
17 return isinstance.call(py, (object, type_), None).unwrap().is_true(py).unwrap(); 17 return isinstance.call(py, (object, type_), None).unwrap().is_true(py).unwrap();
25 25
26 if is_instance(&ast, &arguments_type) { 26 if is_instance(&ast, &arguments_type) {
27 let args = ast.getattr(py, "args").unwrap(); 27 let args = ast.getattr(py, "args").unwrap();
28 let mut arguments = vec!(); 28 let mut arguments = vec!();
29 for arg in args.iter(py).unwrap() { 29 for arg in args.iter(py).unwrap() {
30 let arg = parse_expr(py, arg.unwrap()); 30 let arg = arg.unwrap();
31 arguments.push(arg); 31 let arg = parse_expr(py, arg);
32 arguments.push(match arg {
33 Expr::Name(arg) => arg,
34 _ => panic!()
35 });
32 } 36 }
33 arguments 37 arguments
34 } else { 38 } else {
35 vec!(Expr::Error) 39 panic!()
36 } 40 }
37 } 41 }
38 42
39 fn parse_unaryop(py: Python, ast: PyObject) -> UnaryOp { 43 fn parse_unaryop(py: Python, ast: PyObject) -> UnaryOp {
40 let builtins_module = py.import("builtins").unwrap(); 44 let builtins_module = py.import("builtins").unwrap();