From 9e16d708092e88d0013ef96ef9a33ec28b2c46ea Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 18 Sep 2022 16:34:41 -0400 Subject: feat(tvix/eval): Sketch out impure builtins Sketch out a new set of "impure" builtins, which supplement the existing set of "pure" builtins but are gated behind a feature flag, which allows them to be omitted by crates depending on tvix-eval that only want pure evaluation, such as tvixbolt. Change-Id: I2736017b5c9b4776bbba8758e108ec84887abd66 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6655 Reviewed-by: wpcarro Tested-by: BuildkiteCI Reviewed-by: sterni Reviewed-by: tazjin --- tvix/eval/src/builtins/mod.rs | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'tvix/eval/src/builtins/mod.rs') diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index 55135c4d8d..f40c6f9574 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -20,6 +20,8 @@ use crate::arithmetic_op; use self::versions::{VersionPart, VersionPartsIter}; +#[cfg(feature = "impure")] +mod impure; pub mod versions; /// Coerce a Nix Value to a plain path, e.g. in order to access the file it @@ -292,8 +294,16 @@ fn pure_builtins() -> Vec { fn builtins_set() -> NixAttrs { let mut map: BTreeMap = BTreeMap::new(); - for builtin in pure_builtins() { - map.insert(builtin.name().into(), Value::Builtin(builtin)); + let mut add_builtins = |builtins: Vec| { + for builtin in builtins { + map.insert(builtin.name().into(), Value::Builtin(builtin)); + } + }; + + add_builtins(pure_builtins()); + #[cfg(feature = "impure")] + { + add_builtins(impure::builtins()); } NixAttrs::from_map(map) -- cgit 1.4.1