diff src/main.rs @ 0:211b0df72e64

Hello world!
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sun, 29 May 2016 19:15:02 +0100
parents
children fa7e285f88e7
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,54 @@
+extern crate cpython;
+
+mod python_tb;
+mod python_parse;
+mod python_dump;
+mod python_ast;
+mod ast_convert;
+mod ast_dump;
+//mod ast_rewrite;
+mod ast_type;
+
+use std::fs::File;
+use std::io::Read;
+
+fn main() {
+    let filename = match std::env::args().nth(1) {
+        Some(filename) => filename,
+        None => {
+            // TODO: use stderr instead.
+            println!("USAGE: {} <filename> [filename…]", std::env::args().nth(0).unwrap());
+            std::process::exit(1);
+        }
+    };
+
+    let code = {
+        let mut file = match File::open(&filename) {
+            Ok(file) => file,
+            Err(err) => {
+                // TODO: use stderr instead.
+                println!("Error while opening file “{}”: {}", filename, err);
+                std::process::exit(2);
+            }
+        };
+        let mut code = String::new();
+        file.read_to_string(&mut code).unwrap();
+        code
+    };
+
+    let module = match python_parse::parse_ast(code) {
+        Ok(module) => module,
+        Err(err) => {
+            // TODO: use stderr instead.
+            println!("Error while parsing file “{}”:", filename);
+            python_tb::traceback(err);
+            std::process::exit(3);
+        }
+    };
+
+    //python_dump::dump_module(&module);
+    let module_ast = ast_convert::convert_ast("__main__".to_string(), &module);
+    ast_dump::dump_ast(&module_ast);
+    //ast_rewrite::rewrite_ast(module_ast);
+    ast_type::type_ast(module_ast);
+}