diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 978ec6b48..c4e0097c1 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -1111,7 +1111,7 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_) VM_ASSERT (FRAME_LOCALS_COUNT () > proc + nvalues, vm_error_not_enough_values ()); else - VM_ASSERT (FRAME_LOCALS_COUNT () == proc + nvalues, + VM_ASSERT (FRAME_LOCALS_COUNT () == proc + 1 + nvalues, vm_error_wrong_number_of_values (nvalues)); NEXT (2); } @@ -1427,9 +1427,13 @@ RTL_VM_NAME (SCM vm, SCM program, SCM *argv, size_t nargs_) scm_t_uint32 nlocals = FRAME_LOCALS_COUNT (); ASSERT (nlocals >= 2); + /* FIXME: Really we should capture the caller's registers. Until + then, manually advance the IP so that when the prompt resumes, + it continues with the next instruction. */ + ip++; SYNC_IP (); vm_abort (vm, LOCAL_REF (1), nlocals - 2, &LOCAL_REF (2), - SCM_EOL, &LOCAL_REF (1), ®isters); + SCM_EOL, &LOCAL_REF (0), ®isters); /* vm_abort should not return */ abort (); diff --git a/libguile/vm.c b/libguile/vm.c index 4154cfe9f..c9ce3a31a 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -350,8 +350,11 @@ vm_reinstate_partial_continuation (SCM vm, SCM cont, size_t n, SCM *argv, vp->sp++; *vp->sp = argv_copy[i]; } +#if 0 + /* The number-of-values marker, only used by the stack VM. */ vp->sp++; *vp->sp = scm_from_size_t (n); +#endif /* The prompt captured a slice of the dynamic stack. Here we wind those entries onto the current thread's stack. We also have to