~ chicken-core (chicken-5) 2fdd7dde9546b8bbe910931a332bba1e9d085008
commit 2fdd7dde9546b8bbe910931a332bba1e9d085008 Author: Peter Bex <peter@more-magic.net> AuthorDate: Sat Aug 22 18:17:54 2015 +0200 Commit: Peter Bex <peter@more-magic.net> CommitDate: Sat Aug 22 19:37:27 2015 +0200 bugfixes in C_make_structure(_2) diff --git a/runtime.c b/runtime.c index 878672b0..331b6fbb 100644 --- a/runtime.c +++ b/runtime.c @@ -11351,26 +11351,13 @@ static void bignum_to_str_2(C_word c, C_word *av) void C_ccall C_make_structure(C_word c, C_word *av) { - C_word - /* closure = av[ 0 ] */ - k = av[ 1 ], - type = av[ 2 ], - *p; - int i; - - av += 2; - - for(i = c - 3; i--; C_save(*(av++))); - - C_save(type); - C_save(k); - - if(!C_demand(c - 1)) - C_reclaim((void *)make_structure_2, c); + if(!C_demand(c - 1)) { + C_temporary_stack = C_temporary_stack_bottom - (c - 1); + C_memcpy(C_temporary_stack, av + 1, (c - 1) * sizeof(C_word)); + C_reclaim((void *)make_structure_2, c - 1); + } - p = C_temporary_stack; - C_temporary_stack = C_temporary_stack_bottom; - make_structure_2(0, p); + make_structure_2(c - 1, av + 1); } @@ -11386,11 +11373,10 @@ void C_ccall make_structure_2(C_word c, C_word *av) *(s++) = C_STRUCTURE_TYPE | (size + 1); *(s++) = type; - s += size; av += 2; while(size--) - *(--s) = *(av++); + *(s++) = *(av++); C_kontinue(k, s0); }Trap