From 010a96e52502a70f1746f59b17e385fb2f5930dd Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Sun, 4 Sep 2022 17:57:14 +0300 Subject: refactor(corp/tvixbolt): adapt for tvix-eval's upcoming observer API Instead of the previous hack which painfully threaded through a structure that the disassembler could write to, Tvix's evaluator is gaining a new "Observer" API which lets library clients observe compilation output (and, soon!, runtime tracing). This adapts tvixbolt to use this observer interface (with the default `DisassemblingObserver`) to populate the `bytecode` field of its output. This is purely a mechanical change, no functionality is impacted. Change-Id: I22bd2218629f30fd7351d4cc5ddcf639c12fea14 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6316 Tested-by: BuildkiteCI Reviewed-by: tazjin --- corp/tvixbolt/src/main.rs | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'corp/tvixbolt/src/main.rs') diff --git a/corp/tvixbolt/src/main.rs b/corp/tvixbolt/src/main.rs index 9ed79aa0da82..122a84e0ac6a 100644 --- a/corp/tvixbolt/src/main.rs +++ b/corp/tvixbolt/src/main.rs @@ -1,4 +1,7 @@ -use std::{fmt::Write, rc::Rc}; +use std::fmt::Write; + +use std::rc::Rc; +use tvix_eval::observer::DisassemblingObserver; use web_sys::HtmlTextAreaElement; use yew::prelude::*; use yew::TargetCast; @@ -107,7 +110,7 @@ impl Output { fn eval(code: &str) -> Output { let mut out = Output::default(); - if code == "" { + if code.is_empty() { return out; } @@ -131,21 +134,18 @@ fn eval(code: &str) -> Output { .expr() .expect("expression should exist if no errors occured"); - let mut result = tvix_eval::compiler::compile( + let codemap = Rc::new(codemap); + let mut compilation_observer = DisassemblingObserver::new(codemap, &mut out.bytecode); + + let result = tvix_eval::compile( root_expr, Some("/nixbolt".into()), &file, - tvix_eval::builtins::global_builtins(), - Rc::new(codemap), + tvix_eval::global_builtins(), + &mut compilation_observer, ) .unwrap(); - let lambda = Rc::new(result.lambda); - - tvix_eval::disassembler::disassemble_lambda(&mut out.bytecode, lambda.clone()); - - out.bytecode.append(&mut result.output); - for warning in result.warnings { writeln!( &mut out.warnings, @@ -172,7 +172,7 @@ fn eval(code: &str) -> Output { return out; } - let result = tvix_eval::vm::run_lambda(lambda); + let result = tvix_eval::run_lambda(result.lambda); match result { Ok(value) => writeln!(&mut out.output, "{}", value).unwrap(), -- cgit 1.4.1