diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 4436e7bd5..a79786015 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -152,6 +152,9 @@ vm_run (SCM vm, SCM program, SCM args) vm_error_wrong_num_args: /* nargs and program are valid */ + SYNC_ALL (); + if (objects) + scm_array_handle_release (&objects_handle); scm_wrong_num_args (program); /* shouldn't get here */ goto vm_error; diff --git a/libguile/vm.c b/libguile/vm.c index 6606335ba..f649d4ec7 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -293,6 +293,7 @@ vm_heapify_frames_1 (struct scm_vm *vp, SCM *fp, SCM *sp, SCM **destp) link = vm_heapify_frames_1 (vp, dl, dest - 1, &dest); frame = scm_c_make_heap_frame (fp); fp = SCM_HEAP_FRAME_POINTER (frame); + /* FIXME: I don't think we should be storing heap links on the stack. */ SCM_FRAME_HEAP_LINK (fp) = link; SCM_FRAME_SET_DYNAMIC_LINK (fp, SCM_HEAP_FRAME_POINTER (link)); } @@ -670,6 +671,11 @@ SCM_DEFINE (scm_vm_save_stack, "vm-save-stack", 1, 0, 0, if (vp->fp) { +#ifdef VM_ENABLE_STACK_NULLING + if (vp->sp >= vp->stack_base) + if (!vp->sp[0] || vp->sp[1]) + abort (); +#endif vp->last_frame = vm_heapify_frames_1 (vp, vp->fp, vp->sp, &dest); vp->last_ip = vp->ip; } diff --git a/module/language/scheme/spec.scm b/module/language/scheme/spec.scm index 2c9bc4fb6..ad40a3a2a 100644 --- a/module/language/scheme/spec.scm +++ b/module/language/scheme/spec.scm @@ -46,6 +46,6 @@ #:reader read #:read-file read-file #:translator translate - #:evaluator eval + #:evaluator (lambda (x module) (primitive-eval x)) #:printer write )