#![allow(dead_code)] mod common; //mod syn; mod vm; use std::{convert::TryFrom, env, fs, io, process}; type Result = std::result::Result>; fn get_input_string() -> io::Result { let args: Vec = env::args().collect(); if args.len() <= 1 { println!( "usage: {} file.asm", args.get(0).map(String::as_str).unwrap_or("rasp") ); process::exit(1); } else { fs::read_to_string(&args[1]) } } fn main() -> Result<()> { use vm::obj::syn::parser::SectionsParser; let contents = get_input_string()?; let ast = match SectionsParser::new().parse(&contents) { Ok(ast) => ast, Err(err) => { eprintln!("{}", err); process::exit(1); } }; let obj = vm::obj::obj::Object::try_from(&ast)?; //println!("{:#?}", obj); let mut vm = vm::vm::Vm::new(); vm.load_object(obj, 1024 * 1024 * 64)?; // 64mb let status = vm.run()?; println!("status: {}", status); Ok(()) }