~ 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