diff options
Diffstat (limited to 'tvix/eval/src/vm.rs')
-rw-r--r-- | tvix/eval/src/vm.rs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/tvix/eval/src/vm.rs b/tvix/eval/src/vm.rs index 6fe94184b8a2..980a3ed0f5dd 100644 --- a/tvix/eval/src/vm.rs +++ b/tvix/eval/src/vm.rs @@ -9,7 +9,7 @@ use crate::{ observer::Observer, opcode::{CodeIdx, Count, JumpOffset, OpCode, StackIdx, UpvalueIdx}, upvalues::{UpvalueCarrier, Upvalues}, - value::{Builtin, Closure, Lambda, NixAttrs, NixList, Thunk, Value}, + value::{Builtin, Closure, CoercionKind, Lambda, NixAttrs, NixList, Thunk, Value}, }; struct CallFrame { @@ -344,6 +344,16 @@ impl<'o> VM<'o> { OpCode::OpInterpolate(Count(count)) => self.run_interpolate(count)?, + OpCode::OpCoerceToString => { + // TODO: handle string context, copying to store + let string = fallible!( + self, + // note that coerce_to_string also forces + self.pop().coerce_to_string(CoercionKind::Weak, self) + ); + self.push(Value::String(string)); + } + OpCode::OpJump(JumpOffset(offset)) => { debug_assert!(offset != 0); self.frame_mut().ip += offset; |