diff options
author | Griffin Smith <root@gws.fyi> | 2022-10-08T19·12-0400 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2022-10-10T13·54+0000 |
commit | b6089fb1e516f967bc3f24e9a65c196bed0a9659 (patch) | |
tree | c11c20367d20e94cd1fad3799e6638054c304860 | |
parent | afdf1e0ed02ec6e12a264dcfed18e4ce3028cf2b (diff) |
feat(tvix/eval): Implement builtins.concatMap r/5074
Change-Id: I08bfd040a242aa43b64760c19f48a28303f206ac Reviewed-on: https://cl.tvl.fyi/c/depot/+/6900 Autosubmit: grfn <grfn@gws.fyi> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
-rw-r--r-- | tvix/eval/src/builtins/mod.rs | 13 | ||||
-rw-r--r-- | tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.exp | 1 | ||||
-rw-r--r-- | tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.nix | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index b859e2844ee8..e047ef599b2d 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -164,6 +164,19 @@ fn pure_builtins() -> Vec<Builtin> { ))) }), Builtin::new( + "concatMap", + &[true, true], + |args: Vec<Value>, vm: &mut VM| { + let list = args[1].to_list()?; + let mut res = Vec::new(); + for val in list { + vm.push(val); + res.extend(vm.call_value(&args[0])?.force(vm)?.to_list()?); + } + Ok(Value::List(res.into())) + }, + ), + Builtin::new( "div", &[false, false], |args: Vec<Value>, vm: &mut VM| arithmetic_op!(&*args[0].force(vm)?, &*args[1].force(vm)?, /), diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.exp b/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.exp new file mode 100644 index 000000000000..14d804aa22f5 --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.exp @@ -0,0 +1 @@ +[ "a" "z" "b" "z" ] diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.nix b/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.nix new file mode 100644 index 000000000000..149a0722b11d --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-okay-concatmap.nix @@ -0,0 +1 @@ +(builtins.concatMap (x: [x] ++ ["z"]) ["a" "b"]) |