guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 05/12: Remove sp from scm_vm_cont


From: Andy Wingo
Subject: [Guile-commits] 05/12: Remove sp from scm_vm_cont
Date: Wed, 21 Oct 2015 13:13:30 +0000

wingo pushed a commit to branch master
in repository guile.

commit 30c06bfbb3db6e8c05f2ee6e7866d4ecf5838482
Author: Andy Wingo <address@hidden>
Date:   Sun Oct 18 20:12:15 2015 +0200

    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 7cc3cea..c0a2bd8 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 ec3ec78..366176b 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 d5a7272..74dce63 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 adac085..936633d 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]