diff options
author | Vincent Ambo <mail@tazj.in> | 2022-10-03T08·26+0300 |
---|---|---|
committer | tazjin <tazjin@tvl.su> | 2022-10-04T08·03+0000 |
commit | f0179c92d3248667b7f037de91c6b9eb737a40d2 (patch) | |
tree | 0bb7d7da18baf68a100b9bfc8bbef281d1105c00 | |
parent | b9bfcf2f336b2276d391e75fb04e81bcbad3f692 (diff) |
refactor(tvix/eval): allow impure Value builtins r/5026
Allows impure builtins that have a different shape than a Rust function pointer; specifically this is required for builtins.currentTime which does not work in WASM. Change-Id: I1362d8eeafe770ce4d1c5ebe4d119aeb0abb5c9b Reviewed-on: https://cl.tvl.fyi/c/depot/+/6849 Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: grfn <grfn@gws.fyi> Reviewed-by: wpcarro <wpcarro@gmail.com>
-rw-r--r-- | tvix/eval/src/builtins/impure.rs | 25 | ||||
-rw-r--r-- | tvix/eval/src/builtins/mod.rs | 12 |
2 files changed, 27 insertions, 10 deletions
diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index 3438aa06f424..41e3805b2d0e 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -1,7 +1,26 @@ -use crate::value::Builtin; +use std::{ + collections::BTreeMap, + time::{SystemTime, UNIX_EPOCH}, +}; + +use smol_str::SmolStr; + +use crate::{ + value::{Builtin, NixString}, + Value, +}; + +fn impure_builtins() -> Vec<Builtin> { + vec![] +} /// Return all impure builtins, that is all builtins which may perform I/O outside of the VM and so /// cannot be used in all contexts (e.g. WASM). -pub(super) fn builtins() -> Vec<Builtin> { - vec![] +pub(super) fn builtins() -> BTreeMap<NixString, Value> { + let mut map: BTreeMap<NixString, Value> = impure_builtins() + .into_iter() + .map(|b| (b.name().into(), Value::Builtin(b))) + .collect(); + + map } diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index cd4200a13d3b..848ac9e25dca 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -3,12 +3,10 @@ //! See //tvix/eval/docs/builtins.md for a some context on the //! available builtins in Nix. -use std::{ - cmp, - collections::{BTreeMap, HashMap}, - path::PathBuf, - rc::Rc, -}; +use std::cmp; +use std::collections::{BTreeMap, HashMap}; +use std::path::PathBuf; +use std::rc::Rc; use crate::{ errors::ErrorKind, @@ -385,7 +383,7 @@ fn builtins_set() -> NixAttrs { add_builtins(pure_builtins()); #[cfg(feature = "impure")] { - add_builtins(impure::builtins()); + map.extend(impure::builtins()); } NixAttrs::from_map(map) |