fix(tvix/eval): fix nested assertions b/340
This commit fixes our handling of `throw` within an `assert` condition. Fixes: b/340 Change-Id: I40a383639ec266da50a853f16216b1b7868495da Reviewed-on: https://cl.tvl.fyi/c/depot/+/10318 Autosubmit: Adam Joseph <adam@westernsemico.com> Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
fc963033ae
commit
7b9eea71d0
3 changed files with 2 additions and 0 deletions
|
@ -836,6 +836,7 @@ impl Compiler<'_> {
|
||||||
// Compile the assertion condition to leave its value on the stack.
|
// Compile the assertion condition to leave its value on the stack.
|
||||||
self.compile(slot, node.condition().unwrap());
|
self.compile(slot, node.condition().unwrap());
|
||||||
self.emit_force(&node.condition().unwrap());
|
self.emit_force(&node.condition().unwrap());
|
||||||
|
let throw_idx = self.push_op(OpCode::OpJumpIfCatchable(JumpOffset(0)), node);
|
||||||
let then_idx = self.push_op(OpCode::OpJumpIfFalse(JumpOffset(0)), node);
|
let then_idx = self.push_op(OpCode::OpJumpIfFalse(JumpOffset(0)), node);
|
||||||
|
|
||||||
self.push_op(OpCode::OpPop, node);
|
self.push_op(OpCode::OpPop, node);
|
||||||
|
@ -848,6 +849,7 @@ impl Compiler<'_> {
|
||||||
self.push_op(OpCode::OpAssertFail, &node.condition().unwrap());
|
self.push_op(OpCode::OpAssertFail, &node.condition().unwrap());
|
||||||
|
|
||||||
self.patch_jump(else_idx);
|
self.patch_jump(else_idx);
|
||||||
|
self.patch_jump(throw_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compile conditional expressions using jumping instructions in the VM.
|
/// Compile conditional expressions using jumping instructions in the VM.
|
||||||
|
|
Loading…
Reference in a new issue