~ 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