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 <tazjin@tvl.su>
This commit is contained in:
Griffin Smith 2022-11-06 10:07:46 -05:00 committed by grfn
parent a4c9cc8d5e
commit dad07a8bc0
3 changed files with 16 additions and 10 deletions

View file

@ -120,10 +120,10 @@ pub fn builtins(_args: TokenStream, item: TokenStream) -> TokenStream {
reversed_args.reverse(); reversed_args.reverse();
builtins.push(quote_spanned! { builtin_attr.span() => { builtins.push(quote_spanned! { builtin_attr.span() => {
crate::value::Builtin::new( crate::internal::Builtin::new(
#name, #name,
&[#(#strictness),*], &[#(#strictness),*],
|mut args: Vec<Value>, vm: &mut VM| { |mut args: Vec<crate::Value>, vm: &mut crate::internal::VM| {
#(let #reversed_args = args.pop().unwrap();)* #(let #reversed_args = args.pop().unwrap();)*
#fn_name(vm, #(#args),*) #fn_name(vm, #(#args),*)
} }
@ -134,7 +134,7 @@ pub fn builtins(_args: TokenStream, item: TokenStream) -> TokenStream {
} }
items.push(parse_quote! { items.push(parse_quote! {
pub fn builtins() -> Vec<crate::value::Builtin> { pub fn builtins() -> Vec<crate::internal::Builtin> {
vec![#(#builtins),*] vec![#(#builtins),*]
} }
}); });

View file

@ -1,12 +1,11 @@
pub use tvix_eval::internal;
pub use tvix_eval::Value;
use tvix_eval_builtin_macros::builtins; use tvix_eval_builtin_macros::builtins;
mod value {
pub use tvix_eval::Builtin;
}
#[builtins] #[builtins]
mod builtins { mod builtins {
use tvix_eval::{ErrorKind, Value, VM}; use tvix_eval::internal::VM;
use tvix_eval::{ErrorKind, Value};
#[builtin("identity")] #[builtin("identity")]
pub fn builtin_identity(_vm: &mut VM, x: Value) -> Result<Value, ErrorKind> { pub fn builtin_identity(_vm: &mut VM, x: Value) -> Result<Value, ErrorKind> {

View file

@ -31,8 +31,15 @@ pub use crate::errors::{ErrorKind, EvalResult};
pub use crate::eval::{interpret, Options}; pub use crate::eval::{interpret, Options};
pub use crate::pretty_ast::pretty_print_expr; pub use crate::pretty_ast::pretty_print_expr;
pub use crate::source::SourceCode; pub use crate::source::SourceCode;
pub use crate::value::{Builtin, Value}; pub use crate::value::Value;
pub use crate::vm::{run_lambda, VM}; 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. // TODO: use Rc::unwrap_or_clone once it is stabilised.
// https://doc.rust-lang.org/std/rc/struct.Rc.html#method.unwrap_or_clone // https://doc.rust-lang.org/std/rc/struct.Rc.html#method.unwrap_or_clone