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:
parent
aa9f6b0082
commit
30c06bfbb3
4 changed files with 4 additions and 8 deletions
|
@ -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;
|
||||||
|
|
|
@ -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))
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue