From 30c06bfbb3db6e8c05f2ee6e7866d4ecf5838482 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sun, 18 Oct 2015 20:12:15 +0200 Subject: [PATCH] Remove sp from scm_vm_cont * libguile/vm.h (struct scm_vm_cont): Remove "sp" member; it's always the same as stack_bottom. * libguile/vm.c (scm_i_vm_cont_to_frame, scm_i_vm_capture_stack): (vm_return_to_continuation_inner): * libguile/stacks.c (scm_make_stack): * libguile/continuations.c (scm_i_continuation_to_frame): Adapt. --- libguile/continuations.c | 2 +- libguile/stacks.c | 2 +- libguile/vm.c | 5 ++--- libguile/vm.h | 3 --- 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libguile/continuations.c b/libguile/continuations.c index 7cc3cea10..c0a2bd8ae 100644 --- a/libguile/continuations.c +++ b/libguile/continuations.c @@ -186,7 +186,7 @@ scm_i_continuation_to_frame (SCM continuation, struct scm_frame *frame) stack_top = data->stack_bottom + data->stack_size; frame->stack_holder = data; frame->fp_offset = stack_top - (data->fp + data->reloc); - frame->sp_offset = stack_top - (data->sp + data->reloc); + frame->sp_offset = data->stack_size; frame->ip = data->ra; return 1; diff --git a/libguile/stacks.c b/libguile/stacks.c index ec3ec789f..366176b10 100644 --- a/libguile/stacks.c +++ b/libguile/stacks.c @@ -330,7 +330,7 @@ SCM_DEFINE (scm_make_stack, "make-stack", 1, 0, 1, kind = SCM_VM_FRAME_KIND_CONT; frame.stack_holder = c; frame.fp_offset = stack_top - (c->fp + c->reloc); - frame.sp_offset = stack_top - (c->sp + c->reloc); + frame.sp_offset = c->stack_size; frame.ip = c->ra; } else if (SCM_VM_FRAME_P (obj)) diff --git a/libguile/vm.c b/libguile/vm.c index d5a72727f..74dce6351 100644 --- a/libguile/vm.c +++ b/libguile/vm.c @@ -120,7 +120,7 @@ scm_i_vm_cont_to_frame (SCM cont, struct scm_frame *frame) stack_top = data->stack_bottom + data->stack_size; frame->stack_holder = data; frame->fp_offset = stack_top - (data->fp + data->reloc); - frame->sp_offset = stack_top - (data->sp + data->reloc); + frame->sp_offset = data->stack_size; frame->ip = data->ra; return 1; @@ -142,7 +142,6 @@ scm_i_vm_capture_stack (union scm_vm_stack_element *stack_top, p->stack_bottom = scm_gc_malloc (p->stack_size * sizeof (*p->stack_bottom), "capture_vm_cont"); p->ra = ra; - p->sp = sp; p->fp = fp; memcpy (p->stack_bottom, sp, p->stack_size * sizeof (*p->stack_bottom)); p->reloc = (p->stack_bottom + p->stack_size) - stack_top; @@ -178,7 +177,7 @@ vm_return_to_continuation_inner (void *data_ptr) memcpy (vp->stack_top - cp->stack_size, cp->stack_bottom, cp->stack_size * sizeof (*cp->stack_bottom)); - vm_restore_sp (vp, cp->sp + reloc); + vm_restore_sp (vp, vp->stack_top - cp->stack_size); if (reloc) { diff --git a/libguile/vm.h b/libguile/vm.h index adac08593..936633d21 100644 --- a/libguile/vm.h +++ b/libguile/vm.h @@ -79,9 +79,6 @@ SCM_INTERNAL void scm_i_vm_free_stack (struct scm_vm *vp); #define SCM_F_VM_CONT_REWINDABLE 0x2 struct scm_vm_cont { - /* FIXME: sp isn't needed, it's effectively the same as - stack_bottom */ - union scm_vm_stack_element *sp; union scm_vm_stack_element *fp; scm_t_uint32 *ra; scm_t_ptrdiff stack_size;