From dad07a8bc0369932a7b65efc2dd4181a8863eb5b Mon Sep 17 00:00:00 2001 From: Griffin Smith Date: Sun, 6 Nov 2022 10:07:46 -0500 Subject: refactor(tvix/eval): Be clearer about public interface Some new top-level re-exports (specifically VM, Builtin, and ErrorKind) were added to lib.rs in tvix/eval to allow the builtin-macros tests to work - we should be clear which of these are part of the public interface (I think it's reasonable for ErrorKind to be) and which aren't (specifically I'm not sure VM and Builtin necessarily should be, at least yet). Change-Id: I3bbeaa63cdda9227224cd3bc298a9bb8da4deb7c Reviewed-on: https://cl.tvl.fyi/c/depot/+/7203 Tested-by: BuildkiteCI Reviewed-by: tazjin --- tvix/eval/builtin-macros/src/lib.rs | 6 +++--- tvix/eval/builtin-macros/tests/tests.rs | 9 ++++----- tvix/eval/src/lib.rs | 11 +++++++++-- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/tvix/eval/builtin-macros/src/lib.rs b/tvix/eval/builtin-macros/src/lib.rs index 18889505e6..8e2c4b3f87 100644 --- a/tvix/eval/builtin-macros/src/lib.rs +++ b/tvix/eval/builtin-macros/src/lib.rs @@ -120,10 +120,10 @@ pub fn builtins(_args: TokenStream, item: TokenStream) -> TokenStream { reversed_args.reverse(); builtins.push(quote_spanned! { builtin_attr.span() => { - crate::value::Builtin::new( + crate::internal::Builtin::new( #name, &[#(#strictness),*], - |mut args: Vec, vm: &mut VM| { + |mut args: Vec, vm: &mut crate::internal::VM| { #(let #reversed_args = args.pop().unwrap();)* #fn_name(vm, #(#args),*) } @@ -134,7 +134,7 @@ pub fn builtins(_args: TokenStream, item: TokenStream) -> TokenStream { } items.push(parse_quote! { - pub fn builtins() -> Vec { + pub fn builtins() -> Vec { vec![#(#builtins),*] } }); diff --git a/tvix/eval/builtin-macros/tests/tests.rs b/tvix/eval/builtin-macros/tests/tests.rs index 8f3e83b672..d07020f69b 100644 --- a/tvix/eval/builtin-macros/tests/tests.rs +++ b/tvix/eval/builtin-macros/tests/tests.rs @@ -1,12 +1,11 @@ +pub use tvix_eval::internal; +pub use tvix_eval::Value; use tvix_eval_builtin_macros::builtins; -mod value { - pub use tvix_eval::Builtin; -} - #[builtins] mod builtins { - use tvix_eval::{ErrorKind, Value, VM}; + use tvix_eval::internal::VM; + use tvix_eval::{ErrorKind, Value}; #[builtin("identity")] pub fn builtin_identity(_vm: &mut VM, x: Value) -> Result { diff --git a/tvix/eval/src/lib.rs b/tvix/eval/src/lib.rs index 4dd324f62e..106f7d851c 100644 --- a/tvix/eval/src/lib.rs +++ b/tvix/eval/src/lib.rs @@ -31,8 +31,15 @@ pub use crate::errors::{ErrorKind, EvalResult}; pub use crate::eval::{interpret, Options}; pub use crate::pretty_ast::pretty_print_expr; pub use crate::source::SourceCode; -pub use crate::value::{Builtin, Value}; -pub use crate::vm::{run_lambda, VM}; +pub use crate::value::Value; +pub use crate::vm::run_lambda; + +/// Internal-only parts of `tvix-eval`, exported for use in macros, but not part of the public +/// interface of the crate. +pub mod internal { + pub use crate::value::Builtin; + pub use crate::vm::VM; +} // TODO: use Rc::unwrap_or_clone once it is stabilised. // https://doc.rust-lang.org/std/rc/struct.Rc.html#method.unwrap_or_clone -- cgit 1.4.1