main.rs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //#![feature(plugin)]
  2. //#![plugin(dynasm)]
  3. #![feature(proc_macro_hygiene)]
  4. #[macro_use]
  5. extern crate dynasm;
  6. extern crate winapi;
  7. extern crate typed_arena;
  8. use std::io::{self, Read};
  9. use std::fs::File;
  10. use std::env;
  11. use dynasm::dynasm;
  12. use dynasmrt::{DynasmApi, DynasmLabelApi};
  13. pub mod ir;
  14. pub mod parser;
  15. pub mod interpret;
  16. pub mod optimize;
  17. pub mod compile;
  18. pub mod transpile_c;
  19. use crate::ir::MutVisitor;
  20. fn main() -> io::Result<()> {
  21. let args: Vec<String> = env::args().collect();
  22. let mut buffer = String::new();
  23. if args.len() > 1 {
  24. File::open(&args[1])?.read_to_string(&mut buffer)?;
  25. }
  26. else {
  27. io::stdin().read_to_string(&mut buffer)?;
  28. }
  29. let insts = parser::parse(&buffer);
  30. if let Ok(mut insts) = insts {
  31. let mut lin_loop_optimizer = optimize::LinOptimizer::new();
  32. lin_loop_optimizer.visit_instructions(&mut insts);
  33. for ref inst in &insts {
  34. //println!("{}\n", inst.to_string());
  35. }
  36. println!("{}", transpile_c::transpile_c(&insts));
  37. //let code = compile::compile(&insts);
  38. }
  39. else if let Err(msg) = insts {
  40. println!("error parsing: {}", msg);
  41. }
  42. Ok(())
  43. }