chore(tvix/eval): bootstrap some evaluator boilerplate
Change-Id: I7770a20948d18a8506c2418dea21202aa21a6ddc Reviewed-on: https://cl.tvl.fyi/c/depot/+/6064 Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi>
This commit is contained in:
parent
a9b2157fba
commit
8921688334
3 changed files with 64 additions and 1 deletions
12
tvix/eval/src/errors.rs
Normal file
12
tvix/eval/src/errors.rs
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
use std::fmt::Display;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub struct Error {}
|
||||||
|
|
||||||
|
impl Display for Error {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
writeln!(f, "error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type EvalResult<T> = Result<T, Error>;
|
5
tvix/eval/src/eval.rs
Normal file
5
tvix/eval/src/eval.rs
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
use crate::errors::{Error, EvalResult};
|
||||||
|
|
||||||
|
pub fn interpret(code: String) -> EvalResult<()> {
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -1,3 +1,49 @@
|
||||||
|
use std::{
|
||||||
|
env, fs,
|
||||||
|
io::{self, Write},
|
||||||
|
mem, process,
|
||||||
|
};
|
||||||
|
|
||||||
|
mod errors;
|
||||||
|
mod eval;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
let mut args = env::args();
|
||||||
|
if args.len() > 2 {
|
||||||
|
println!("Usage: tvix-eval [script]");
|
||||||
|
process::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(file) = args.nth(1) {
|
||||||
|
run_file(&file);
|
||||||
|
} else {
|
||||||
|
run_prompt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_file(file: &str) {
|
||||||
|
let contents = fs::read_to_string(file).expect("failed to read the input file");
|
||||||
|
|
||||||
|
run(contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run_prompt() {
|
||||||
|
let mut line = String::new();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
print!("> ");
|
||||||
|
io::stdout().flush().unwrap();
|
||||||
|
io::stdin()
|
||||||
|
.read_line(&mut line)
|
||||||
|
.expect("failed to read user input");
|
||||||
|
run(mem::take(&mut line));
|
||||||
|
line.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn run(code: String) {
|
||||||
|
match eval::interpret(code) {
|
||||||
|
Ok(result) => println!("=> {:?}", result),
|
||||||
|
Err(err) => eprintln!("{}", err),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue