aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.rs
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-01-10 14:06:38 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-01-10 14:06:38 +0100
commit78749296776b2d9b7cb1d03b93c97ceb32c8c0b3 (patch)
tree45b29dada0784b3b7c6264dae61169fe4ecaa84d /src/main.rs
parentde8108932c3ac9ef1ea70ea5b0c74f369c36c442 (diff)
downloadsylt-78749296776b2d9b7cb1d03b93c97ceb32c8c0b3.tar.gz
take Paths where files are needed
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs22
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)
+}
}
}