1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-20 11:40:18 +02:00

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.
This commit is contained in:
Andy Wingo 2015-10-18 20:12:15 +02:00
parent aa9f6b0082
commit 30c06bfbb3
4 changed files with 4 additions and 8 deletions

View file

@ -186,7 +186,7 @@ scm_i_continuation_to_frame (SCM continuation, struct scm_frame *frame)
stack_top = data->stack_bottom + data->stack_size; stack_top = data->stack_bottom + data->stack_size;
frame->stack_holder = data; frame->stack_holder = data;
frame->fp_offset = stack_top - (data->fp + data->reloc); 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; frame->ip = data->ra;
return 1; return 1;

View file

@ -330,7 +330,7 @@ SCM_DEFINE (scm_make_stack, "make-stack", 1, 0, 1,
kind = SCM_VM_FRAME_KIND_CONT; kind = SCM_VM_FRAME_KIND_CONT;
frame.stack_holder = c; frame.stack_holder = c;
frame.fp_offset = stack_top - (c->fp + c->reloc); 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; frame.ip = c->ra;
} }
else if (SCM_VM_FRAME_P (obj)) else if (SCM_VM_FRAME_P (obj))

View file

@ -120,7 +120,7 @@ scm_i_vm_cont_to_frame (SCM cont, struct scm_frame *frame)
stack_top = data->stack_bottom + data->stack_size; stack_top = data->stack_bottom + data->stack_size;
frame->stack_holder = data; frame->stack_holder = data;
frame->fp_offset = stack_top - (data->fp + data->reloc); 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; frame->ip = data->ra;
return 1; 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), p->stack_bottom = scm_gc_malloc (p->stack_size * sizeof (*p->stack_bottom),
"capture_vm_cont"); "capture_vm_cont");
p->ra = ra; p->ra = ra;
p->sp = sp;
p->fp = fp; p->fp = fp;
memcpy (p->stack_bottom, sp, p->stack_size * sizeof (*p->stack_bottom)); memcpy (p->stack_bottom, sp, p->stack_size * sizeof (*p->stack_bottom));
p->reloc = (p->stack_bottom + p->stack_size) - stack_top; 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, memcpy (vp->stack_top - cp->stack_size,
cp->stack_bottom, cp->stack_bottom,
cp->stack_size * sizeof (*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) if (reloc)
{ {

View file

@ -79,9 +79,6 @@ SCM_INTERNAL void scm_i_vm_free_stack (struct scm_vm *vp);
#define SCM_F_VM_CONT_REWINDABLE 0x2 #define SCM_F_VM_CONT_REWINDABLE 0x2
struct scm_vm_cont { 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; union scm_vm_stack_element *fp;
scm_t_uint32 *ra; scm_t_uint32 *ra;
scm_t_ptrdiff stack_size; scm_t_ptrdiff stack_size;