From edd13573f523a3a03346d6737081466bc9c5299d Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Mon, 12 Dec 2022 23:26:20 +0300 Subject: [PATCH] refactor(tvix/eval): use light spans in builtins.import Change-Id: I05732073155b430575babb6f076bf465aef98857 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7581 Tested-by: BuildkiteCI Reviewed-by: grfn --- tvix/eval/src/builtins/impure.rs | 8 ++------ tvix/eval/src/vm.rs | 12 ++++++------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index 904706dc6..d371d8779 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -13,7 +13,6 @@ use crate::{ errors::ErrorKind, io::FileType, observer::NoOpObserver, - spans::LightSpan, value::{Builtin, BuiltinArgument, NixAttrs, Thunk}, vm::VM, SourceCode, Value, @@ -123,7 +122,7 @@ pub fn builtins_import(globals: &Weak, source: SourceCode) -> Builti path.push("default.nix"); } - let current_span = vm.current_span(); + let current_span = vm.current_light_span(); if let Some(cached) = vm.import_cache.get(&path) { return Ok(cached.clone()); @@ -172,10 +171,7 @@ pub fn builtins_import(globals: &Weak, source: SourceCode) -> Builti // Compilation succeeded, we can construct a thunk from whatever it spat // out and return that. - let res = Value::Thunk(Thunk::new_suspended( - result.lambda, - LightSpan::new_actual(current_span), - )); + let res = Value::Thunk(Thunk::new_suspended(result.lambda, current_span)); vm.import_cache.insert(path, res.clone()); diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index fcbbe6190..b074bd422 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -220,17 +220,17 @@ impl<'o> VM<'o> { self.chunk().get_span(self.frame().ip - 1) } + /// Returns the information needed to calculate the current span, + /// but without performing that calculation. + pub(crate) fn current_light_span(&self) -> LightSpan { + LightSpan::new_delayed(self.frame().lambda.clone(), self.frame().ip - 1) + } + /// Access the I/O handle used for filesystem access in this VM. pub(crate) fn io(&self) -> &Box { &self.io_handle } - /// Returns the information needed to calculate the current span, - /// but without performing that calculation. - fn current_light_span(&self) -> LightSpan { - LightSpan::new_delayed(self.frame().lambda.clone(), self.frame().ip - 1) - } - /// Construct an error from the given ErrorKind and the source /// span of the current instruction. pub fn error(&self, kind: ErrorKind) -> Error {