about summary refs log tree commit diff
path: root/tvix/eval/src/vm.rs
diff options
context:
space:
mode:
authorGriffin Smith <root@gws.fyi>2022-10-23T16·25-0400
committergrfn <grfn@gws.fyi>2022-10-23T17·39+0000
commit89aee6443c0211759480911f3e4f9a7ce9eb2423 (patch)
tree5c9540c5e42fbaf61c03241113a4f85b4bfc3902 /tvix/eval/src/vm.rs
parentd4569cb5046882dd5d4c8f3b187d167119186fa5 (diff)
fix(tvix/eval): Use natural arg order for call_with r/5187
Since we push arguments onto a stack when calling multi-argument
functions, we actually were ending up calling `call_with` with the
arguments in the *reverse order* - we patched around this by passing the
arguments in the reverse order for `foldl'`, but it makes more sense to
have them just be the order that the function would be called with in
user surface code instead.

Change-Id: Ifddb98f46970ac89872383709c3ce758dc965c65
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7067
Reviewed-by: sterni <sternenseemann@systemli.org>
Autosubmit: grfn <grfn@gws.fyi>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/vm.rs')
-rw-r--r--tvix/eval/src/vm.rs3
1 files changed, 2 insertions, 1 deletions
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs
index 4d049c6d71b0..08c913ed2d6d 100644
--- a/tvix/eval/src/vm.rs
+++ b/tvix/eval/src/vm.rs
@@ -265,9 +265,10 @@ impl<'o> VM<'o> {
     pub fn call_with<I>(&mut self, callable: &Value, args: I) -> EvalResult<Value>
     where
         I: IntoIterator<Item = Value>,
+        I::IntoIter: DoubleEndedIterator,
     {
         let mut num_args = 0_usize;
-        for arg in args {
+        for arg in args.into_iter().rev() {
             num_args += 1;
             self.push(arg);
         }