diff options
author | Andy Wingo <wingo@pobox.com> | 2015-10-18 20:12:15 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2015-10-21 11:49:20 +0200 |
commit | 30c06bfbb3db6e8c05f2ee6e7866d4ecf5838482 (patch) | |
tree | 1a0df35226e83758dee1a71966738eb917a22694 | |
parent | aa9f6b00827bd0c1a2f11274191f49b0ad31926d (diff) | |
download | guile-30c06bfbb3db6e8c05f2ee6e7866d4ecf5838482.tar.gz |
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.
-rw-r--r-- | libguile/continuations.c | 2 | ||||
-rw-r--r-- | libguile/stacks.c | 2 | ||||
-rw-r--r-- | libguile/vm.c | 5 | ||||
-rw-r--r-- | 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; |