mod compile; mod object; mod syn; mod vm; use std::io::Read; use std::path::PathBuf; use structopt::StructOpt; use syn::parser::Parser; use vm::machine::MachineBuilder; #[derive(Debug, StructOpt)] struct Opt { #[structopt(name = "PATH", parse(from_os_str))] path: Option, #[structopt(long)] max_stack_size: Option, #[structopt(long)] max_arena_objects: Option, } type Result> = std::result::Result; fn main() -> Result { let opt = Opt::from_args(); let text = if let Some(path) = opt.path.as_ref() { std::fs::read_to_string(path)? } else { let mut input = String::new(); std::io::stdin().read_to_string(&mut input)?; input }; let mut parser = Parser::from(text.as_str()); let mut exprs = Vec::new(); while !parser.is_eof() { exprs.extend(parser.next_expr_list()?); } let machine = MachineBuilder::default() .max_stack_size(opt.max_stack_size) .max_arena_objects(opt.max_arena_objects) .finish(); Ok(()) }