diff options
Diffstat (limited to 'tvix/eval/src/vm')
-rw-r--r-- | tvix/eval/src/vm/mod.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/tvix/eval/src/vm/mod.rs b/tvix/eval/src/vm/mod.rs index 6c11997db1f5..92fa0f00e3d3 100644 --- a/tvix/eval/src/vm/mod.rs +++ b/tvix/eval/src/vm/mod.rs @@ -983,8 +983,16 @@ impl<'o> VM<'o> { fn run_interpolate(&mut self, frame: &CallFrame, count: usize) -> EvalResult<()> { let mut out = String::new(); - for _ in 0..count { - out.push_str(self.stack_pop().to_str().with_span(frame, self)?.as_str()); + for i in 0..count { + let val = self.stack_pop(); + if val.is_catchable() { + for _ in (i + 1)..count { + self.stack.pop(); + } + self.stack.push(val); + return Ok(()); + } + out.push_str(val.to_str().with_span(frame, self)?.as_str()); } self.stack.push(Value::String(out.into())); |