~ 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