Skip to content

Commit 29fa245

Browse files
committed
fix(eval): deal with registers on call
1 parent 3d5db5e commit 29fa245

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

core/eval.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -695,15 +695,19 @@ obj_p call(obj_p fn, i64_t arity) {
695695
vm->rs[vm->rp].fn = saved_fn;
696696
vm->rs[vm->rp].fp = saved_fp;
697697
vm->rs[vm->rp].ip = -1; // External call marker
698+
i64_t saved_rp = vm->rp;
698699
vm->rp++;
699700

700701
// Execute bytecode
701702
res = vm_eval(fn);
702703

703704
// Pop frame and restore context
704-
vm->rp--;
705-
vm->fn = saved_fn;
706-
vm->fp = saved_fp;
705+
// Only pop if vm_error_unwind hasn't already unwound past our frame
706+
if (vm->rp > saved_rp) {
707+
vm->rp--;
708+
vm->fn = saved_fn;
709+
vm->fp = saved_fp;
710+
}
707711

708712
return res;
709713
}

0 commit comments

Comments
 (0)