feat(tvix/eval): Add a proc-macro for defining builtins
Add a single new proc macro to a new proc-macro crate, `tvix-eval-proc-macros` for defining an inline module containing nix builtins, and automatically generating a function within that module which returns a list of those builtins as `tvix_eval::value::Builtin`. Change-Id: Ie4afae438914d2af93d15637151a49b4c68aa352 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7198 Reviewed-by: tazjin <tazjin@tvl.su> Reviewed-by: Adam Joseph <adam@westernsemico.com> Tested-by: BuildkiteCI
This commit is contained in:
parent
cf82a545eb
commit
645d0c06e5
9 changed files with 1133 additions and 3 deletions
26
tvix/eval/builtin-macros/tests/tests.rs
Normal file
26
tvix/eval/builtin-macros/tests/tests.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
use tvix_eval_builtin_macros::builtins;
|
||||
|
||||
mod value {
|
||||
pub use tvix_eval::Builtin;
|
||||
}
|
||||
|
||||
#[builtins]
|
||||
mod builtins {
|
||||
use tvix_eval::{ErrorKind, Value, VM};
|
||||
|
||||
#[builtin("identity")]
|
||||
pub fn builtin_identity(_vm: &mut VM, x: Value) -> Result<Value, ErrorKind> {
|
||||
Ok(x)
|
||||
}
|
||||
|
||||
#[builtin("tryEval")]
|
||||
pub fn builtin_try_eval(_: &mut VM, #[lazy] _x: Value) -> Result<Value, ErrorKind> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn builtins() {
|
||||
let builtins = builtins::builtins();
|
||||
assert_eq!(builtins.len(), 2);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue