From e8253c70444a580d3b087a53118960d58fbe5984 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sun, 7 Aug 2022 23:42:33 +0300 Subject: chore(tvix/eval): wire things up for development flow This creates a REPL which outputs compiled bytecode, constants, and VM results for code snippets. Change-Id: If63f79a961456afd6a4cdf59b994107ff7ab8b47 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6072 Tested-by: BuildkiteCI Reviewed-by: grfn Autosubmit: tazjin --- tvix/eval/src/eval.rs | 23 +++++++++++++++++++++-- tvix/eval/src/main.rs | 2 +- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/tvix/eval/src/eval.rs b/tvix/eval/src/eval.rs index 89a375b69a..0c4900e7e5 100644 --- a/tvix/eval/src/eval.rs +++ b/tvix/eval/src/eval.rs @@ -1,5 +1,24 @@ +use rnix::{self, types::TypedNode}; +use std::fmt::Write; + use crate::errors::{Error, EvalResult}; -pub fn interpret(code: String) -> EvalResult<()> { - Ok(()) +pub fn interpret(code: String) -> EvalResult { + let ast = rnix::parse(&code); + + let errors = ast.errors(); + if !errors.is_empty() { + todo!() + } + + let mut out = String::new(); + writeln!(out, "{}", ast.root().dump()).ok(); + + let code = crate::compiler::compile(ast)?; + writeln!(out, "code: {:?}", code).ok(); + + let value = crate::vm::run_chunk(code)?; + writeln!(out, "value: {:?}", value).ok(); + + Ok(out) } diff --git a/tvix/eval/src/main.rs b/tvix/eval/src/main.rs index 55365efabd..4cfa0a137a 100644 --- a/tvix/eval/src/main.rs +++ b/tvix/eval/src/main.rs @@ -48,7 +48,7 @@ fn run_prompt() { fn run(code: String) { match eval::interpret(code) { - Ok(result) => println!("=> {:?}", result), + Ok(result) => println!("=> {}", result), Err(err) => eprintln!("{}", err), } } -- cgit 1.4.1