diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-01-10 14:06:38 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-01-10 14:06:38 +0100 |
| commit | 78749296776b2d9b7cb1d03b93c97ceb32c8c0b3 (patch) | |
| tree | 45b29dada0784b3b7c6264dae61169fe4ecaa84d /src/main.rs | |
| parent | de8108932c3ac9ef1ea70ea5b0c74f369c36c442 (diff) | |
| download | sylt-78749296776b2d9b7cb1d03b93c97ceb32c8c0b3.tar.gz | |
take Paths where files are needed
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index 987bcd2..e6265f8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,18 +1,24 @@ +use std::path::{Path, PathBuf}; + mod tokenizer; mod vm; mod compiler; fn main() { - let file = "tests/simple.tdy"; - let tokens = tokenizer::file_to_tokens(file); - - for token in tokens.iter() { - println!("{:?}", token); + let file = file_from_args().unwrap_or_else(|| Path::new("tests/simple.tdy").to_owned()); + if let Err(err) = run_file(&file) { + println!("{}", err); } +} - let block = compiler::compile("main", file, tokens); +fn file_from_args() -> Option<PathBuf> { + std::env::args().skip(1).map(|s| Path::new(&s).to_owned()).find(|p| p.is_file()) +} - if let Err(err) = vm::run_block(block) { - println!("{}", err); +fn run_file(path: &Path) -> Result<(), vm::VMError> { + let tokens = tokenizer::file_to_tokens(path); + let block = compiler::compile("main", path, tokens); // path -> str might fail + vm::run_block(block) +} } } |
