~ chicken-core (chicken-5) 23fdb45756b9c5de9f89607423570d3ab948aa7c


commit 23fdb45756b9c5de9f89607423570d3ab948aa7c
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Jul 17 12:06:11 2015 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jul 17 12:06:11 2015 +0200

    several corrections in C_apply_values

diff --git a/runtime.c b/runtime.c
index abf50a2d..3f615625 100644
--- a/runtime.c
+++ b/runtime.c
@@ -6118,19 +6118,29 @@ void C_ccall C_apply_values(C_word c, C_word *av)
     av2 = C_alloc(n + 1);
     av2[ 0 ] = k;
     C_memcpy(av2 + 1, C_temporary_stack_limit, n * sizeof(C_word));
-    C_do_apply(n, av2);
+    C_do_apply(n + 1, av2);
   }
   
-  if(C_immediatep(lst) || (C_block_header(lst) == C_PAIR_TAG && C_u_i_cdr(lst) == C_SCHEME_END_OF_LIST)) {
+  if(C_immediatep(lst)) {
 #ifdef RELAX_MULTIVAL_CHECK
-    if(C_immediatep(lst)) n = C_SCHEME_UNDEFINED;
-    else n = C_u_i_car(lst);
+    n = C_SCHEME_UNDEFINED;
 #else
     barf(C_CONTINUATION_CANT_RECEIVE_VALUES_ERROR, "values", k);
 #endif
   }
-  else n = C_u_i_car(lst);
-
+  else if(C_block_header(lst) == C_PAIR_TAG) {
+    if(C_u_i_cdr(lst) == C_SCHEME_END_OF_LIST)
+      n = C_u_i_car(lst);
+    else {
+#ifdef RELAX_MULTIVAL_CHECK
+      n = C_u_i_car(lst);
+#else
+      barf(C_CONTINUATION_CANT_RECEIVE_VALUES_ERROR, "values", k);
+#endif
+    }
+  }
+  else barf(C_BAD_ARGUMENT_TYPE_ERROR, "apply", lst);
+  
   C_kontinue(k, n);
 }
 
Trap