From c8fcdca4eb09709966ea25883cbe91f34c038236 Mon Sep 17 00:00:00 2001 From: Evgeny Zemtsov Date: Thu, 22 Jun 2023 17:57:50 +0200 Subject: feat(tvix/eval): allow extending builtins outside of tvix_eval The change allows applications that use tvix_serde for parsing nix-based configuration to extend the language with domain-specific set of features. Change-Id: Ia86612308a167c456ecf03e93fe0fbae55b876a6 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8848 Reviewed-by: tazjin Tested-by: BuildkiteCI --- tvix/eval/builtin-macros/src/lib.rs | 14 ++++++-------- tvix/eval/src/builtins/impure.rs | 1 + tvix/eval/src/builtins/mod.rs | 1 + tvix/eval/src/tests/mod.rs | 1 + 4 files changed, 9 insertions(+), 8 deletions(-) (limited to 'tvix/eval') diff --git a/tvix/eval/builtin-macros/src/lib.rs b/tvix/eval/builtin-macros/src/lib.rs index dfd0948c7d9f..e2cd51b92451 100644 --- a/tvix/eval/builtin-macros/src/lib.rs +++ b/tvix/eval/builtin-macros/src/lib.rs @@ -116,10 +116,8 @@ fn parse_module_args(args: TokenStream) -> Option { /// /// # Examples /// ```ignore +/// # use tvix_eval; /// # use tvix_eval_builtin_macros::builtins; -/// # mod value { -/// # pub use tvix_eval::Builtin; -/// # } /// /// #[builtins] /// mod builtins { @@ -270,7 +268,7 @@ pub fn builtins(args: TokenStream, item: TokenStream) -> TokenStream { if arg.strict { f.block = Box::new(parse_quote_spanned! {arg.span=> { - let #ident: #ty = generators::request_force(&co, values.pop() + let #ident: #ty = tvix_eval::generators::request_force(&co, values.pop() .expect("Tvix bug: builtin called with incorrect number of arguments")).await; #block @@ -295,20 +293,20 @@ pub fn builtins(args: TokenStream, item: TokenStream) -> TokenStream { if captures_state { builtins.push(quote_spanned! { builtin_attr.span() => { let inner_state = state.clone(); - crate::Builtin::new( + tvix_eval::Builtin::new( #name, #docstring, #arg_count, - move |values| Gen::new(|co| generators::pin_generator(#fn_name(inner_state.clone(), co, values))), + move |values| Gen::new(|co| tvix_eval::generators::pin_generator(#fn_name(inner_state.clone(), co, values))), ) }}); } else { builtins.push(quote_spanned! { builtin_attr.span() => { - crate::Builtin::new( + tvix_eval::Builtin::new( #name, #docstring, #arg_count, - |values| Gen::new(|co| generators::pin_generator(#fn_name(co, values))), + |values| Gen::new(|co| tvix_eval::generators::pin_generator(#fn_name(co, values))), ) }}); } diff --git a/tvix/eval/src/builtins/impure.rs b/tvix/eval/src/builtins/impure.rs index adf43e1a2ea9..cf3186ce5087 100644 --- a/tvix/eval/src/builtins/impure.rs +++ b/tvix/eval/src/builtins/impure.rs @@ -7,6 +7,7 @@ use std::{ }; use crate::{ + self as tvix_eval, errors::ErrorKind, io::FileType, value::NixAttrs, diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index b5c7931768e9..c841f9fc6a29 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -16,6 +16,7 @@ use crate::value::PointerEquality; use crate::vm::generators::{self, GenCo}; use crate::warnings::WarningKind; use crate::{ + self as tvix_eval, errors::ErrorKind, value::{CoercionKind, NixAttrs, NixList, NixString, SharedThunkSet, Thunk, Value}, }; diff --git a/tvix/eval/src/tests/mod.rs b/tvix/eval/src/tests/mod.rs index f800baf05018..02227a7e9a2d 100644 --- a/tvix/eval/src/tests/mod.rs +++ b/tvix/eval/src/tests/mod.rs @@ -10,6 +10,7 @@ mod one_offs; mod mock_builtins { //! Builtins which are required by language tests, but should not //! actually exist in //tvix/eval. + use crate as tvix_eval; use crate::generators::GenCo; use crate::*; use genawaiter::rc::Gen; -- cgit 1.4.1