Mercurial > python-compiler.rs
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(); |