Mercurial > python-compiler.rs
annotate src/main.rs @ 96:20c1c9d7803d default tip
Fix dump failure in strings containing backquotes and double quotes.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 28 Jun 2016 01:40:55 +0100 |
parents | c06d12a81637 |
children |
rev | line source |
---|---|
93
c06d12a81637
Better test failure. Use assert_diff! instead of assert_eq! so we can actually see what the differences are.
Bastien Orivel <eijebong@bananium.fr>
parents:
90
diff
changeset
|
1 #[macro_use(assert_diff)] |
c06d12a81637
Better test failure. Use assert_diff! instead of assert_eq! so we can actually see what the differences are.
Bastien Orivel <eijebong@bananium.fr>
parents:
90
diff
changeset
|
2 extern crate difference; |
0 | 3 extern crate cpython; |
4 | |
93
c06d12a81637
Better test failure. Use assert_diff! instead of assert_eq! so we can actually see what the differences are.
Bastien Orivel <eijebong@bananium.fr>
parents:
90
diff
changeset
|
5 |
62
d255a932553f
Fix a few warnings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
23
diff
changeset
|
6 #[cfg(test)] |
23
5a7c3393382b
Add a simple test for ast.Assign.
Bastien Orivel <eijebong@bananium.fr>
parents:
22
diff
changeset
|
7 mod tests; |
5a7c3393382b
Add a simple test for ast.Assign.
Bastien Orivel <eijebong@bananium.fr>
parents:
22
diff
changeset
|
8 |
0 | 9 mod python_tb; |
10 mod python_parse; | |
11 mod python_ast; | |
90
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
12 mod python_symtable; |
0 | 13 mod ast_convert; |
14 mod ast_dump; | |
13
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
15 //mod ast_scope; |
0 | 16 //mod ast_rewrite; |
9
fa7e285f88e7
Add a scoping pass, associating each module/statement with a block.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
0
diff
changeset
|
17 //mod ast_type; |
0 | 18 |
19 use std::fs::File; | |
20 use std::io::Read; | |
21 | |
22 fn main() { | |
23 let filename = match std::env::args().nth(1) { | |
24 Some(filename) => filename, | |
25 None => { | |
26 // TODO: use stderr instead. | |
27 println!("USAGE: {} <filename> [filename…]", std::env::args().nth(0).unwrap()); | |
28 std::process::exit(1); | |
29 } | |
30 }; | |
31 | |
32 let code = { | |
33 let mut file = match File::open(&filename) { | |
34 Ok(file) => file, | |
35 Err(err) => { | |
36 // TODO: use stderr instead. | |
37 println!("Error while opening file “{}”: {}", filename, err); | |
38 std::process::exit(2); | |
39 } | |
40 }; | |
41 let mut code = String::new(); | |
42 file.read_to_string(&mut code).unwrap(); | |
43 code | |
44 }; | |
45 | |
90
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
46 let module = match python_parse::parse_ast(code.clone()) { |
0 | 47 Ok(module) => module, |
48 Err(err) => { | |
49 // TODO: use stderr instead. | |
50 println!("Error while parsing file “{}”:", filename); | |
51 python_tb::traceback(err); | |
52 std::process::exit(3); | |
53 } | |
54 }; | |
55 | |
90
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
56 let symtable = match python_symtable::generate_symtable(code, &filename) { |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
57 Ok(symtable) => symtable, |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
58 Err(err) => { |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
59 // TODO: use stderr instead. |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
60 println!("Error while parsing file “{}”:", filename); |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
61 python_tb::traceback(err); |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
62 std::process::exit(4); |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
63 } |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
64 }; |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
65 println!("{:#?}", symtable); |
4e62a8927dcc
Add a symtable module, to obtain information about symbols.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
88
diff
changeset
|
66 |
0 | 67 let module_ast = ast_convert::convert_ast("__main__".to_string(), &module); |
22
25b202005d1d
Return a String from ast_dump instead of printing it directly.
Bastien Orivel <eijebong@bananium.fr>
parents:
13
diff
changeset
|
68 println!("{}", ast_dump::dump_ast(&module_ast)); |
13
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
69 //let scoped_ast = ast_scope::scope_ast(vec!(module_ast)); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
70 //println!("{:#?}", scoped_ast); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
71 //let new_scoped_ast = ast_scope::check_scoping(scoped_ast); |
38b0d63697b1
Import the full AST grammar from CPython 3.5.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
9
diff
changeset
|
72 //println!("{:#?}", new_scoped_ast); |
0 | 73 //ast_rewrite::rewrite_ast(module_ast); |
9
fa7e285f88e7
Add a scoping pass, associating each module/statement with a block.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
0
diff
changeset
|
74 //ast_type::type_ast(scoped_ast); |
0 | 75 } |