refactor(tvix/eval): remove VM argument from suspended native thunks

Because they do not use it, and it can not be passed with the coming
generator refactoring.

Change-Id: I0d96f2357a7ee79cd8a0f401583d4286230d4a6b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8146
Tested-by: BuildkiteCI
Reviewed-by: raitobezarius <tvl@lahfa.xyz>
This commit is contained in:
Vincent Ambo 2023-02-26 18:40:52 +03:00 committed by tazjin
parent 38fd3cb292
commit bfb787a6c5
3 changed files with 7 additions and 13 deletions

View file

@ -6,13 +6,7 @@ use std::{
time::{SystemTime, UNIX_EPOCH}, time::{SystemTime, UNIX_EPOCH},
}; };
use crate::{ use crate::{errors::ErrorKind, io::FileType, value::NixAttrs, vm::VM, Value};
errors::ErrorKind,
io::FileType,
value::{NixAttrs, Thunk},
vm::VM,
Value,
};
#[builtins] #[builtins]
mod impure_builtins { mod impure_builtins {

View file

@ -1329,7 +1329,7 @@ fn compile_src_builtin(
let file = source.add_file(format!("<src-builtins/{}.nix>", name), code.to_string()); let file = source.add_file(format!("<src-builtins/{}.nix>", name), code.to_string());
let weak = weak.clone(); let weak = weak.clone();
Value::Thunk(Thunk::new_suspended_native(Box::new(move |_| { Value::Thunk(Thunk::new_suspended_native(Box::new(move || {
let result = compile( let result = compile(
&parsed.tree().expr().unwrap(), &parsed.tree().expr().unwrap(),
None, None,
@ -1390,7 +1390,7 @@ pub fn prepare_globals(
let weak_globals = weak.clone(); let weak_globals = weak.clone();
builtins.insert( builtins.insert(
"builtins", "builtins",
Value::Thunk(Thunk::new_suspended_native(Box::new(move |_| { Value::Thunk(Thunk::new_suspended_native(Box::new(move || {
Ok(weak_globals Ok(weak_globals
.upgrade() .upgrade()
.unwrap() .unwrap()

View file

@ -39,7 +39,7 @@ use crate::{
use super::{Lambda, TotalDisplay}; use super::{Lambda, TotalDisplay};
/// Internal representation of a suspended native thunk. /// Internal representation of a suspended native thunk.
struct SuspendedNative(Box<dyn Fn(&mut VM) -> Result<Value, ErrorKind>>); struct SuspendedNative(Box<dyn Fn() -> Result<Value, ErrorKind>>);
impl Debug for SuspendedNative { impl Debug for SuspendedNative {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
@ -109,7 +109,7 @@ impl Thunk {
}))) })))
} }
pub fn new_suspended_native(native: Box<dyn Fn(&mut VM) -> Result<Value, ErrorKind>>) -> Self { pub fn new_suspended_native(native: Box<dyn Fn() -> Result<Value, ErrorKind>>) -> Self {
Thunk(Rc::new(RefCell::new(ThunkRepr::Native(SuspendedNative( Thunk(Rc::new(RefCell::new(ThunkRepr::Native(SuspendedNative(
native, native,
))))) )))))
@ -199,7 +199,7 @@ impl Thunk {
// the trampoline, to handle the case of the native function // the trampoline, to handle the case of the native function
// returning another thunk. // returning another thunk.
ThunkRepr::Native(native) => { ThunkRepr::Native(native) => {
let value = native.0(vm)?; let value = native.0()?;
self.0.replace(ThunkRepr::Evaluated(value)); self.0.replace(ThunkRepr::Evaluated(value));
let self_clone = self.clone(); let self_clone = self.clone();
@ -277,7 +277,7 @@ impl Thunk {
// Same as for the native case above, but results are placed // Same as for the native case above, but results are placed
// in *both* thunks. // in *both* thunks.
ThunkRepr::Native(native) => { ThunkRepr::Native(native) => {
let value = native.0(vm)?; let value = native.0()?;
self.0.replace(ThunkRepr::Evaluated(value.clone())); self.0.replace(ThunkRepr::Evaluated(value.clone()));
inner.0.replace(ThunkRepr::Evaluated(value)); inner.0.replace(ThunkRepr::Evaluated(value));
let self_clone = self.clone(); let self_clone = self.clone();