scm_i_prompt_pop_abort_args_x takes struct scm_vm* as arg
authorAndy Wingo <wingo@pobox.com>
Thu, 21 Nov 2013 17:09:29 +0000 (18:09 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 21 Nov 2013 17:09:29 +0000 (18:09 +0100)
* libguile/control.h:
* libguile/control.c (scm_i_prompt_pop_abort_args_x): Change to take VP
  as an arg, not VM.

* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Adapt.

libguile/control.c
libguile/control.h
libguile/eval.c
libguile/throw.c

index 4f7cc78..f4abce1 100644 (file)
 
 /* Only to be called if the SCM_I_SETJMP returns 1 */
 SCM
-scm_i_prompt_pop_abort_args_x (SCM vm)
+scm_i_prompt_pop_abort_args_x (struct scm_vm *vp)
 {
   size_t i, n;
   SCM vals = SCM_EOL;
 
-  n = scm_to_size_t (SCM_VM_DATA (vm)->sp[0]);
+  n = scm_to_size_t (vp->sp[0]);
   for (i = 0; i < n; i++)
-    vals = scm_cons (SCM_VM_DATA (vm)->sp[-(i + 1)], vals);
+    vals = scm_cons (vp->sp[-(i + 1)], vals);
 
   /* The abort did reset the VM's registers, but then these values
      were pushed on; so we need to pop them ourselves. */
-  SCM_VM_DATA (vm)->sp -= n + 1;
+  vp->sp -= n + 1;
   /* FIXME NULLSTACK */
 
   return vals;
index b9a7e23..4b76591 100644 (file)
@@ -22,7 +22,7 @@
 #include "libguile/vm.h"
 
 
-SCM_INTERNAL SCM scm_i_prompt_pop_abort_args_x (SCM vm);
+SCM_INTERNAL SCM scm_i_prompt_pop_abort_args_x (struct scm_vm *vp);
 
 SCM_INTERNAL void scm_c_abort (struct scm_vm *vp, SCM tag, size_t n, SCM *argv,
                                scm_i_jmp_buf *registers) SCM_NORETURN;
index 7b09d84..d4d1085 100644 (file)
@@ -438,7 +438,8 @@ eval (SCM x, SCM env)
 
     case SCM_M_CALL_WITH_PROMPT:
       {
-        SCM vm, k, res;
+        struct scm_vm *vp;
+        SCM k, res;
         scm_i_jmp_buf registers;
         /* We need the handler after nonlocal return to the setjmp, so
            make sure it is volatile.  */
@@ -446,23 +447,24 @@ eval (SCM x, SCM env)
 
         k = EVAL1 (CAR (mx), env);
         handler = EVAL1 (CDDR (mx), env);
-        vm = scm_the_vm ();
+        vp = SCM_VM_DATA (scm_the_vm ());
 
         /* Push the prompt onto the dynamic stack. */
-        scm_dynstack_push_prompt
-          (&SCM_I_CURRENT_THREAD->dynstack,
-           SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS,
-           k,
-           SCM_VM_DATA (vm)->fp - SCM_VM_DATA (vm)->stack_base,
-           SCM_VM_DATA (vm)->sp - SCM_VM_DATA (vm)->stack_base,
-           SCM_VM_DATA (vm)->ip,
-           &registers);
+        scm_dynstack_push_prompt (&SCM_I_CURRENT_THREAD->dynstack,
+                                  SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY
+                                  | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS,
+                                  k,
+                                  vp->fp - vp->stack_base,
+                                  vp->sp - vp->stack_base,
+                                  vp->ip,
+                                  &registers);
 
         if (SCM_I_SETJMP (registers))
           {
             /* The prompt exited nonlocally. */
             proc = handler;
-            args = scm_i_prompt_pop_abort_args_x (scm_the_vm ());
+            vp = SCM_VM_DATA (scm_the_vm ());
+            args = scm_i_prompt_pop_abort_args_x (vp);
             goto apply_proc;
           }
         
index e68f428..252632c 100644 (file)
@@ -456,7 +456,8 @@ SCM_SYMBOL (sym_pre_init_catch_tag, "%pre-init-catch-tag");
 static SCM
 pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler)
 {
-  volatile SCM vm, v_handler;
+  struct scm_vm *vp;
+  volatile SCM v_handler;
   SCM res;
   scm_t_dynstack *dynstack = &SCM_I_CURRENT_THREAD->dynstack;
   scm_i_jmp_buf registers;
@@ -469,7 +470,7 @@ pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler)
 
   /* These two are volatile, so we know we can access them after a
      nonlocal return to the setjmp.  */
-  vm = scm_the_vm ();
+  vp = SCM_VM_DATA (scm_the_vm ());
   v_handler = handler;
 
   /* Push the prompt onto the dynamic stack. */
@@ -477,15 +478,18 @@ pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler)
                             SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY
                             | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS,
                             sym_pre_init_catch_tag,
-                            SCM_VM_DATA (vm)->fp - SCM_VM_DATA (vm)->stack_base,
-                            SCM_VM_DATA (vm)->sp - SCM_VM_DATA (vm)->stack_base,
-                            SCM_VM_DATA (vm)->ip,
+                            vp->fp - vp->stack_base,
+                            vp->sp - vp->stack_base,
+                            vp->ip,
                             &registers);
 
   if (SCM_I_SETJMP (registers))
     {
       /* nonlocal exit */
-      SCM args = scm_i_prompt_pop_abort_args_x (vm);
+      SCM args;
+      /* vp is not volatile */
+      vp = SCM_VM_DATA (scm_the_vm ());
+      args = scm_i_prompt_pop_abort_args_x (vp);
       /* cdr past the continuation */
       return scm_apply_0 (v_handler, scm_cdr (args));
     }