diff options
Diffstat (limited to 'tvix/eval/src/vm.rs')
-rw-r--r-- | tvix/eval/src/vm.rs | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index 232e27aabbd3..eb860eae007e 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -240,6 +240,20 @@ impl VM { }); } } + + // Remove the given number of elements from the stack, + // but retain the top value. + OpCode::OpCloseScope(count) => { + // Immediately move the top value into the right + // position. + let target_idx = self.stack.len() - 1 - count; + self.stack[target_idx] = self.pop(); + + // Then drop the remaining values. + for _ in 0..(count - 1) { + self.pop(); + } + } } if self.ip == self.chunk.code.len() { |